22 Jul 2005 20:16:38 -0400

Related articles |
---|

Sine and Cosine Accuracy on AMD64 and Pentium 4 scott.ladd@coyotegulch.com (Scott Robert Ladd) (2005-05-26) |

Re: Sine and Cosine Accuracy on AMD64 and Pentium 4 gah@ugcs.caltech.edu (glen herrmannsfeldt) (2005-05-28) |

Re: Sine and Cosine Accuracy on AMD64 and Pentium 4 jcrens@earthlink.net (Jack Crenshaw) (2005-07-17) |

Re: Sine and Cosine Accuracy on AMD64 and Pentium 4 Juergen.Kahrs@vr-web.de (=?ISO-8859-1?Q?J=FCrgen_Kahrs?=) (2005-07-17) |

Re: Sine and Cosine Accuracy on AMD64 and Pentium 4 gah@ugcs.caltech.edu (glen herrmannsfeldt) (2005-07-22) |

Re: Sine and Cosine Accuracy on AMD64 and Pentium 4 henry@spsystems.net (2005-07-26) |

From: | glen herrmannsfeldt <gah@ugcs.caltech.edu> |

Newsgroups: | comp.compilers |

Date: | 22 Jul 2005 20:16:38 -0400 |

Organization: | Compilers Central |

References: | 05-05-215 05-07-075 |

Keywords: | arithmetic, testing |

Posted-Date: | 22 Jul 2005 20:16:38 EDT |

Jack Crenshaw wrote:

*> 1) are you sure your value of pi is not part of the problem?*

*> I have always been told to let the numeric processor set*

*> its own value, which it knows internally at 80-bit accuracy.*

*> You can get that value using something like*

*> pi = 4 * atan(1);*

There was recently a long discussion in comp.lang.fortran about

argument reduction for trigonometric functions.

In this case, however, it doesn't depend much at all

on the value of pi.

*> 2) It seems to me you're testing the output of the log function > as*

much as anything else. Why the logarithmic approach?

The log converts to bits or digits. That also shouldn't have

much effect on the result.

(big snip of complicated program, the most important

statements being...)

*>> double s1 = sin(x);*

*>> double c1 = cos(x);*

*>> double one = s1 * s1 + c1 * c1;*

*>> double diff = one - 1.0;*

*>> final *= one;*

For a variety of different values of x.

Note that this does not depend at all on the accuracy of the sin

and cos functions. If sin() returned 1 for all x, and cos() returned

zero you would call it perfectly accurate where it obviously isn't.

There are algorithms where maintaining identities is more important

than accuracy, some of which go by the name symplectic.

A dynamics problem, for example, may find that conservation of energy

is more important than the accurate final positions of the objects.

If one is trying to land an object on mars, the final position is more

important than the accurate kinetic energy.

-- glen

Post a followup to this message

Return to the
comp.compilers page.

Search the
comp.compilers archives again.