-7

cos(); は理解しています。C ++では、ラジアンを正しく使用します..そして、ラジアンを取得できます..

 (angle * PI ) / 180;

では、なぜ

 float value = cos( (90 * PI / 180 ); // == 6.1 etc... and not 0?

Windowsで関数電卓を使用すると、cos(90)ゼロになります。しかし、実験として、 を押すcosh(90)と、C++ で関数を呼び出すと同じ 6.1 などの値が得られます。

何が起こっているのですか?ここに私のコードがあります...

http://ideone.com/YQgLz

私が基本的に求めているのは、C++で Windows 電卓cos(90 degrees)と同じ数値が返される理由です。cosh(90)とにかくゼロではないcos(90 degrees)はずですか?

4

1 に答える 1

3

したがって、実際には 6.1 (1 より大きいコサイン/サイン値は特定の複素数でのみ可能) ではなく、6.1 * 10^-17 になります。問題は、浮動小数点数が正確な値ではないことです (本質的に - これが基数 2 表現のしくみです)。また、数学関数も正確な値を返しません。さまざまな近似式を使用して値を計算します。それらが正確であることを期待してください。

于 2012-09-21T05:34:16.067 に答える