2012-09-21 1062 views
-7

我明白,cos();在C++使用权弧度..和你可以得到弧度..为什么cos(90)不等于零?

(angle * PI)/180; 

那么,为什么

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

如果我在Windows中使用科学计算器cos(90)我得到为零。然而,作为一个实验,当我推cosh(90)时,我得到了相同的6.1等...值,调用C++中的函数给了我。

任何想法是怎么回事?这里是我的代码,因为它是现在...

http://ideone.com/YQgLz

什么我问基本上就是为什么在C++ cos(90 degrees)回来具有相同数量的Windows计算器做cosh(90)。无论如何,cos(90 degrees)应该是零吗?

+0

...这是一个编程问题? – bdares

+12

你真的得到了6.1的余弦值吗? – 2012-09-21 05:27:20

+1

这是一个编程问题,因为我试图找出为什么cos不工作,因为我认为它应该...这是我的代码 - http://ideone.com/YQgLz – aJynks

回答

2

所以,你真的没有得到6.1(余弦/正弦值大于1只能用于某些复数),但6.1 * 10^-17。问题在于浮点数不是精确值(本质上 - 这就是base-2表示的工作原理),数学函数也不会返回精确值 - 它们使用各种近似形式来计算值 - 不需要永远期望他们是确切的。

+0

谢谢,但问题是为什么cosh在计算器上给我和我的程序相同的输出。而不是cos(90度)应该是0? – aJynks

+2

@aJynks是的,余弦(90deg)应该是0,但你不明白为什么它不是?刚刚阅读我的答案。另外,cosh()不会返回相同的结果。它返回6.1 * 10^38而不是6.1 * 10^-17 - 这只是巧合,尾数的前两位数字是相同的。 – 2012-09-21 05:38:41

+1

@aJynks对不起,您已经被一个无辜的问题困扰过,这是StackOverflow的一个方面让我困扰。但是,您需要的两件事是维基百科关于[科学记数法]的文章(http://en.wikipedia。org/wiki/Scientific_notation)和[每个程序员应该了解的浮点数](http://floating-point-gui.de/)。对你的问题的回答包含在理解这些文章中。 – HostileFork