2013-01-11 141 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。 –

相关问题