将double转换为BigInteger时出错

时间:2013-08-02 12:27:59

标签: c# double limit biginteger

在解决欧拉的问题时,我遇到了这个......

BigInteger temp = (BigInteger)Math.Pow(99, 95); Console.WriteLine(temp.ToString());

输出以下数字。 3848960788934848488282452569509484590776195611314554049114673132510910096787679715604422673797115451807631980373077374162416714994207463122539142978709403811688831410945323915071533162168320

但是当我尝试使用此link找到电源时,它会显示..

3848960788934848611927795802824596789608451156087366034658627953530148126008534258032267383768627487094610968554286692697374726725853195657679460590239636893953692985541958490801973870359499

两个值不同。我的问题是,使用数学函数查找权限时有限制,或者转换从double到BignInteger是错误的吗?

1 个答案:

答案 0 :(得分:1)

您必须使用BigInteger.Pow,而不是Math.Pow

使用Math.Pow,返回的值是双精度浮点类型,其精度相当于大约15-17个有效小数。因此,只有前15-17个数字是正确的。