我写了一个程序来确定数字中的位数
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
long long num1 = 1999999999999999;
long long num2 = 9999999999999999;
int number_of_digit_1 = log10(num1) + 1;
int number_of_digit_2 = log10(num2) + 1;
cout << number_of_digit_1 << endl;
cout << number_of_digit_2 << endl;
}
输出是这个
16
17
即使应该打印相同的数字(16)。为什么会这样?
log10
将各种浮点类型用作参数,并在其结果中返回相同的类型。就您而言,它正在转换为double
。
double
它只有53
整数(有效位数)部分。
9999999999999999
需要54位才能准确表示。
当您转换9999999999999999
成double
get时10000000000000000
,预期16
from的结果log10(9999999999999999)
。
为了获得准确(可能更快)的整数位数,您应该使用整数方法来计算位数。例如,有各种技术,在现代x86-64上,为64位整数计算整数Log10的最快方法是什么?或http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句