2013-01-11 145 views
0

的大值I寫非常簡單的代碼:Math.Cos(X)< - 1其中x

public static void Main (string[] args) 
{  
    String str="1,0992748756871115E+41"; //yes, I know that is very large value 

    Double x=Convert.ToDouble(str); 

    Double res=Math.Cos(x); 

    Double resRound=Math.Round(res); 

    Console.WriteLine("x={0}\nres={1}\nresRound={2}", x, res, resRound); 
} 

和RES值的驗證碼輸出非常大的值:1,09927487568711E+41其中a等於爲Math.cos的論點: screen

我想,這是Gtk#一個錯誤,決定測試通過.NET框架compilled什麼價值回報這個代碼,並返回相同的值! 是這樣的函數COS(X)的意思超過段的從-11限制?這怎麼可能?

+0

它意味着功能不是在如此高的幅度精確。 – SLaks

+0

您可以只用2 * PI國防部的價值,並採取了COS ... – Servy

+0

@Servy:並非如此;結果將是完全沒有意義的。 –

回答

3

documentation:d的範圍從大約

可接受的值-9223372036854775295至大約9223372036854775295.對於此範圍以外的值,則cos方法返回ð不變而不是拋出異常。

+0

謝謝。但是,製造它的原因是什麼? – Mixim

+0

@Mixim:由於這個尺寸的數字不再具有使'cos'等計算有意義的精度。 –

-1

可以打破錶達式得到像

成本(A + B)= * COSA的CoSb -SinA * SINB

打破低,你可以在文檔中獲取值限制

+0

這沒有幫助。 'double'沒有足夠的精度來使這些計算有意義。 –

+0

是的,你可以......只需將你的數字除以2並繼續這樣做,直到你達到極限以下,當你除以餘數時,將其放入其中一個數字,如 cos(7)= cos3 * cos4 -sin3 * sin4 ....做相同的... –

+0

你可以這樣做,但計算不會告訴你任何有用的東西;輸入1e41(如OP的例子),誤差大約爲1e25。 –

相關問題