首页 > 解决方案 > 如何在 C# 中处理超过 double.Max 的双数?

问题描述

我正在使用一种返回较大 double值 ( > 1e308) 的方法,然后将该值乘以一个较小 double的值以获得合理的数字。我的问题是如何处理C#中超过 ( ) 的double值而不获得 Infinity 输出?1.79E308

标签: c#double

解决方案


尝试使用对数( Log(1e308) == 709.196...):而不是

 double bigNumber = SomeMethod();          // double.PositiveInfinity
 double smallNumber = SomeOtherMethod();
 double result = bigNumber * smallNumber;  // double.PositiveInfinity

实施

 double bigNumber = SomeMethodLog();                  // reasonable value
 double smallNumber = SomeOtherMethodLog();
 // bigNumber will be cancelled out with smallNumber
 double result = Math.Exp(bigNumber + smallNumber);   // reasonable value

推荐阅读