我需要帮助的地方...
我现在要做的是翻译这个解决方案,它计算一个数字的尾数到 C++:
n^m = exp10(m log10(n)) = exp(q (m log(n)/q)) where q = log(10)
从结果中查找前 n 位数字可以这样完成:
"the first K digits of exp10(x) = the first K digits of exp10(frac(x))
where frac(x) = the fractional part of x = x - floor(x)."
我的尝试(由数学和这段代码引发)失败了......:
u l l function getPrefix(long double pow /*exponent*/, long double length /*length of prefix*/)
{
long double dummy; //unused but necessary for modf
long double q = log(10);
u l l temp = floor(pow(10.0, exp(q * modf( (pow * log(2)/q), &dummy) + length - 1));
return temp;
}
如果那里的任何人都可以正确实施此解决方案,我需要您的帮助!!
编辑
我尝试的示例输出:
n: 2
米:0
n^m: 1
计算尾数:1.16334
n: 2
米:1
n^m: 2
计算尾数:2.32667
n: 2
米:2
n^m: 4
计算尾数:4.65335
n: 2
米:98
n^m: 3.16913e+29
计算尾数:8.0022
n: 2
米:99
n^m: 6.33825e+29
计算尾数:2.16596