2012-09-21 133 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

相關問題