我在c ++中编写了以下代码:
double t = pow(pow(2, 32), 4)+5;
double div = floor(t / pow(2, 32));
double div2 = div*pow(2, 32);
double remain = t - div2;
cout << remain << endl;
剩下的必须是5但控制台和调试显示我0.00000000 ???为什么呢?
c#中的类似代码:
double t = Math.Pow(Math.Pow(2, 32), 4) + 5;
double div = Math.Floor(t / Math.Pow(2, 32));
double div2 = div * Math.Pow(2, 32);
double remain = t - div2;
Console.WriteLine(remain);
答案 0 :(得分:3)
您正在使用double
将 5 添加到 2 128 。为了增加 5 以产生任何效果,它需要使用至少127位来表示重要性。如果我没记错的话它会使用52。你需要使用更大的代表。由于您只进行整数运算,因此应该使用大整数表示。
答案 1 :(得分:1)
您的功能溢出...使用BigInteger ...
var t = BigInteger.Pow(BigInteger.Pow(2, 32), 4) + 5;
var div = t / BigInteger.Pow(2, 32);
var div2 = div * BigInteger.Pow(2, 32);
var remain = t - div2;
Console.WriteLine(remain);