双值分区
我在c#中有一个分区的问题,我得到了+无穷大和-infity。 我有这样的代码:双值分区
double Sunrise = 0.0; double Sunset = 0.0;
double Daylength = 0.0;
Sunrise = 12 - Math.Acos(CosWo)/(15/360 * 2 * Math.PI);
Sunset = 12 + Math.Acos(CosWo)/(15/360 * 2 * Math.PI);
Daylength = 2 * Math.Acos(CosWo)/(15/360 * 2 * Math.PI);
当我打印我得到的日落日出和日照的结果+无穷大和-infity他们的价值观,我应该怎么做才能解决这个问题。
回答:
你是一个整数值(360)分 - 尝试执行以下操作:
Sunrise = 12 - Math.Acos(CosWo)/(15/360.0 * 2 * Math.PI); Sunset = 12 + Math.Acos(CosWo)/(15/360.0 * 2 * Math.PI);
Daylength = 2 * Math.Acos(CosWo)/(15/360.0 * 2 * Math.PI);
回答:
的短篇小说是15/360
将返回零(因为整数除法的),然后Math.Acos(CosWo)/0
将+/-Infinity
,取决于Math.Acos(CosW)
的值。将您的代码更改为仅使用双打:15.0/360.0 * 2.0 * Math.PI
应解决该问题。
更详细的解释:
你会看到+Infinity/-Infinity
作为双打值,当你除以零。考虑一下,将数字除以零应该在技术上抛出一个异常,其中.NET将用于整数除法(1/0将抛出DivideByZeroExeption)。对于双打,IEEE-754标准(https://en.wikipedia.org/wiki/IEEE_754)定义,除以零之后,您将获得+/-Infinity
。如果你仔细想一想,这是有道理的,因为将接近于零的越来越小的数字划分为无穷大(尝试1/0.1,1/0.001,1/0.0001等等,亲自查看)。
以上是 双值分区 的全部内容, 来源链接: utcz.com/qa/259076.html