开发者

bin float precision numbers according to exponent

What is a good way to bin float precision numbers? something like this, but perhaps more efficient?

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

I have thought of getting exponent directly, frexp, and using that. Is it worthwhile?


I'll answer this question, I think it might help you:

"Given a number x, what is the exponent when x is written in scientific notation. For example, if x is .007, the exponent is -3 (7x10^-3)."

So, x = a * 10^b, with 1 <= a < 10. We solve for b.

Let's take the log (base 10) of both sides

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

Now b is an integer, and 0 <= log(a) < 1, so log(a) is really just the fractional part of log(x). So, we can just drop the fractional part by rounding log(x) down.

  • b = floor(log(x))

When x = .007, b = floor(-2.15) = -3 as expected

I think the C code would be int b = (int) floor( log10( x ) )

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜