编辑:为了澄清一下,我所说的"双精度十进制指数"是指数值的大小或数值的以10为底的指数.例如,3456.7->;3.4567E3->;科学指数=3
我需要找出双精度数的十进制指数.
我一直在研究如何做到这一点,我找到了各种方法.
例如,要估计指数,微软的STL使用interesting lookup table:
然而,我想出的方法似乎是最简单的:
// v -> value
// x -> ScientificExponent
// 10^x <= v < 10^(x+1)
// x <= log(v) < x+1
ScientificExponent = (Value == 0) ? 1 : floor((log10(fabs(Value))));
我在想为什么这个没用过.有没有这种方法不起作用的情况?这会不会被认为太慢了?
有没有我没有考虑到的边缘/角点情况(可能不正常的值太小,无法获得准确的对数计算)?
我很感激人们能提供的任何见解.
另外,如果这是一个很好的方法,那么有没有一个只计算log10的整数部分的好方法呢?把对数计算到小数点后很多位,结果却把它和floor
位一起扔掉,这似乎是一种浪费.