添加double.MaxValue + double.MaxValue

use*_*264 2 c# double

面试中有人问我这个问题,面试官告诉我,有一种有效的方法来获取输出。需要添加两个double值:

double d = double.MaxValue;
double d1 = double.MaxValue;

var c = d + d1;
Run Code Online (Sandbox Code Playgroud)

但是我得到double.PositiveInfinity了结果。我需要在输出中存储大量。

p.s*_*w.g 5

也许面试官想让您使用BigInteger

using System.Numerics;

double d = double.MaxValue;
double d1 = double.MaxValue;

var c = new BigInteger(d) + new BigInteger(d1);
Console.WriteLine(c); // 359538626972463...
Run Code Online (Sandbox Code Playgroud)

  • @ user3293264当double值足够大(而double.MaxValue绝对足够大)时,它的精度不足以表示小数点后的任何数据。您不会丢失任何数据。 (2认同)
  • @AymenDaoudi BigInteger是一个值类型,其本身包含引用类型,如果数据过大,则将数据存储在其他位置。除非您的数字太大,以至于表示形式无法容纳到内存中,否则您应该没有问题,但是只有当您的数字有数十亿个数字(而不是这里的数百个数字)时,才会发生问题。 (2认同)