bin根据指数浮点精度数

时间:2010-07-10 17:24:00

标签: floating-point

bin float精度数的好方法是什么? 像这样的东西,但也许更有效率?

x = 1;
for i = 0,size-1 {  // loop over number of bins
    if (value > x) {
        ++bin[i]; return;
    }
    x *= 0.1;
}
++bin[size-1]; // increment last bins

我想过直接获得指数frexp并使用它。 值得吗?

1 个答案:

答案 0 :(得分:1)

我会回答这个问题,我认为它可以帮到你:

“给定一个数字x,当用科学记数法写出x时,指数是多少。例如,如果x是.007,则指数是-3(7x10 ^ -3)。”

因此,x = a * 10 ^ b,其中1 <= a <1。 10.我们解决b。

让我们拿两边的日志(基数10)

  • log(x)= log(a * 10 ^ b)
  • log(x)= log(a)+ log(10 ^ b)
  • log(x)= log(a)+ b
  • b = log(x) - log(a)

现在b是整数,并且0 <= log(a)&lt; 1,所以log(a)实际上只是log(x)的小数部分。因此,我们可以通过向下舍入log(x)来删除小数部分。

  • b = floor(log(x))

当x = .007时,b = floor(-2.15)= -3符合预期

我认为C代码是 int b =(int)floor(log10(x))