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
formatting link
есть статейка с готовым кодом преобразования 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