2010-07-10 2 views
0

Что такое хороший номер для чисел с поплавком бензина? что-то вроде этого, но, возможно, более эффективно?номер поплавка бен-поплавка в соответствии с показателем

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, и с помощью этого. Стоит ли это?

+0

Вы запрашиваете хороший способ для номеров бинов, но вы не описываете числа. Ответ Тома ниже может быть хорошим решением, если все цифры не находятся между 0 и 10 ... Возможно, вы могли бы описать, почему вы хотите сделать это, чтобы помочь понять, какое лучшее решение будет. – codekaizen

ответ

1

Я отвечу на этот вопрос, я думаю, что это может помочь вам:.

«Учитывая число х, что является показателем, когда х записывается в научной нотации, например, если х 0,007, то показатель составляет -3 (7x10^-3). "

Итак, x = a * 10^b, с 1 < = a < 10. Мы решаем для b.

Давайте журнал (основание 10) с обеих сторон

  • журнал (х) = журнал (а * 10^б)
  • журнал (х) = журнал (а) + журнал (10^б)
  • журнал (х) = лог (а) + б
  • Ь = лог (х) - журнал (а)

Теперь Ь представляет собой целое число, и 0 < = лог (а) < 1, поэтому log (a) действительно просто дробный часть журнала (x). Таким образом, мы можем просто отбросить дробную часть путем округления log (x) вниз.

  • б = пол (журнал (х))

При х = 0,007, Ь = пол (-2,15) = -3, как ожидалось

Я считаю, что код С будет int b = (int) floor (log10 (x))

+0

Это так очевидно, я чувствую себя несколько глупо, даже за то, что – Anycorn

Смежные вопросы