双值分区

我在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

回到顶部