l*********y 发帖数: 142 | 1 下面这个方程计算 num! 的结果在base进制下的位数
比如说 5!的结果在10进制下是3位数,在16进制下是2位数。
题目限定 1<= num <= 2^20, and 1 <= base <= 800.
int GetNumDigit(int num, int base)
{
double result = 0;
for (int i = 1; i <= num; i++) {
result += log(i);
}
int digit = ceil(result / log(base) + 1e-10);
return digit;
}
我想请教1e-10在这里的使用? 我读过很多float and double精度的文章,所以知道result/log(base)的结果会有精度loss,但是我对精度补偿值的用法不是很懂。
包括何时用 还有 如何定值。以前还碰到一个例子是atof 时加了1e-10,
现在结合这个例子就完全没方向了。
谢谢了! |
|