про float

Do you have a question? Post it now! No Registration Necessary

Threaded View
Hi Boris, hope you are having a nice day!


22 Дек 04, Boris Belyakov wrote to All:

 BB> сейчас сделано так, что первому слагаемому (которое равно 0.5) условно
 BB> соответствует число 50000..., которое в последующих итерациях  делится
 BB> пополам. Всё это суммируется, а потом делается bin -> bcd до нужного
 BB> знака. Верю, что это не есть совершенство :-) Ведь делал же кто то
 BB> свой float _to_ string вместо printf ...

А что мешает сделать сначала умножение числа на 10^n, затем конвертнуть в целое
(с округлением или без), а затем уже
как обычно bin to bcd?

WBR,
    AVB


Re: про float
Hello Alexey.

Воскресенье, Декабрь, 26, 2004 00:39:22, Alexey V Bugrov wrote to Boris
Belyakov:

BB>> сейчас сделано так, что первому слагаемому (которое равно 0.5) условно
BB>> соответствует число 50000..., которое в последующих итерациях  делится
BB>> пополам. Всё это суммируется, а потом делается bin -> bcd до нужного
BB>> знака. Верю, что это не есть совершенство :-) Ведь делал же кто то
BB>> свой float _to_ string вместо printf ...

AVB> А что мешает сделать сначала умножение числа на 10^n, затем конвертнуть в
AVB> целое (с округлением или без), а затем уже как обычно bin to bcd?

Да нет, Алексей, ничего не мешает, просто хотелось узнать нет ли алгоритма
отличного от представленного. Верю что есть...


Boris

... Hаука не пиво - в pот не вольешь

Re: про float
Hello, Boris!
You wrote to Alexey V Bugrov on Tue, 28 Dec 2004 13:45:30 +0500:

 BB> Hello Alexey.

 BB> Воскресенье, Декабрь, 26, 2004 00:39:22, Alexey V Bugrov wrote to Boris
 BB> Belyakov:

 BB>>> сейчас сделано так, что первому слагаемому (которое равно 0.5)
 BB>>> условно соответствует число 50000..., которое в последующих итерациях
 BB>>> делится пополам. Всё это суммируется, а потом делается bin -> bcd до
 BB>>> нужного знака. Верю, что это не есть совершенство :-) Ведь делал же
 BB>>> кто то свой float _to_ string вместо printf ...

 AVB>> А что мешает сделать сначала умножение числа на 10^n, затем
 AVB>> конвертнуть в целое (с округлением или без), а затем уже как обычно
 AVB>> bin to bcd?

 BB> Да нет, Алексей, ничего не мешает, просто хотелось узнать нет ли
 BB> алгоритма отличного от представленного. Верю что есть...

Во первых, на atmel.ru http://www.atmel.ru/Articles/Atmel13.htm есть
статейка с готовым кодом преобразования float -> bcd.
Я в ней сильно не разбирался, может там то же про что ты пишешь.
Поинтресуйся, может найдешь что для себя интересное.


Я же сделал преобразование double -> bcd по методу, предложенному AVB. Мне
этот метод понравился быстротой и простотой.
Только я не умножал double на 10^n напрямую - это долго. Я n раз умножал
double на 10. А на 10 я умножал так: double*8 + double*2.
То есть фактически инкрементировал порядок на 3 и на 1 соответственно.
Быстрее получается.
Округлял я уже готовое BCD.

With best regards, Dmitry Gromov.  E-mail: snipped-for-privacy@deletethis.newmail.ru



Site Timeline