StrToFloat() & FloatToStr()

Компьютер "Спринтер" http://sprinter.nedopc.org

Moderator: Shaos

Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

StrToFloat() & FloatToStr()

Post by Mac Buster »

Может кто-нибудь объяснить как преобразовать вещественное число в строку - StrToFloaf() - и обратно - FloatToStr() - без последовательного деления и умножения целой и дробной частей ? Чем понятнее объясните, тем быстрее будет выпущен калькулятор для Flex-а :wink:
User avatar
Vasil Ivanov
Doomed
Posts: 413
Joined: 11 Dec 2003 14:34

Post by Vasil Ivanov »

По сабжу, к сожалению, пока ничего дельного не попадалось.


P.S. Когда дело дойдет до правки библиотечных функций SOLID C под Estex,
то для "printf" хочу прикрутить твою процедуру (что ты кидал как-то на
форуме ПП). Наткнулся на глюки в твоем "printf". Это относится к выводу
знаковых чисел. У тебя заюзано "res 7,a", я кидаю уже по-фиксенные проце-
дурки.
Long2DEC:
ld a,(de) ; ст.разряд
ld l,a
inc de
ld a,(de)
ld h,a
bit 7,a
jp z,uLong2DEC_ ; сохр. старший и загр. мл.разряд
inc de
ld a,(de) ; мл.разряд
ld c,a
inc de
ld a,(de)
ld b,a
; обраб. мл.разряд
xor a
sub c
ld c,a
ld a,0
sbc a,b
ld b,a
; обраб. ст.разряд
ld a,0
sbc a,l
ld l,a
ld a,0
sbc a,h
ld h,a
push hl
ld l,c
ld a,b
;
push af
ld a,"-"
call OutputSymbl
...
Кста, у тебя в этой процедуре проверка
bit 7,a
jp z,uLong2DEC_
делается для младшего разряда, вместо старшего.

Положение метки "uLong2DEC_" в твоем сорце, для моего куска надо
пересмотреть. Адрес перехода не совпадает с твоим.


Далее, никаких особенностей нет.
Word2DEC:
ld a,(de)
ld l,a
inc de
ld a,(de)
bit 7,a
jr z,uWord2DEC_
;res 7,a
;
ld h,a ;--
xor a ;
sub l ;
ld l,a ;
ld a,0 ;
sbc a,h ;--
;
push af
ld a,"-"
call OutputSymbl
pop af
jr uWord2DEC_


Byte2DEC:
ld h,0
ld a,(de)
bit 7,a
jr z,uByte2DEC_
;res 7,a
;
ld l,a ;--
xor a ;
sub l ;--
;
push af
ld a,"-"
call OutputSymbl
pop af
jr uByte2DEC_
Vasil Ivanov
vasil-i@yandex.ru
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Post by Mac Buster »

По сабжу, к сожалению, пока ничего дельного не попадалось.
Мне тоже. Не хочется верить что такая функция реализуется делением :P
Наткнулся на глюки в твоем "printf".
Удивительно что только ты о них сказал :D Там кое-что следует вообще переписать. Кроме того, я кажется так и не сделал удаление незначащих нулей. Постараюсь заняться в выходной.
User avatar
Vasil Ivanov
Doomed
Posts: 413
Joined: 11 Dec 2003 14:34

Post by Vasil Ivanov »

Mac Buster wrote:
Наткнулся на глюки в твоем "printf".
Удивительно что только ты о них сказал :D Там кое-что следует вообще переписать. Кроме того, я кажется так и не сделал удаление незначащих нулей. Постараюсь заняться в выходной.
Да, у тебя не прикручено удаление ведущих нулей. Брошу тебе мой вариант для SOLID C. Только его еще надо чуть с`оптимизить (где стоят "dec hl;", "inc hl;"). Только это черновой тестовый вариант для CP/M.
Хотел бросить сюда, но здесь все форматирование текста сбивается.
Поэтому брошу на твой e-mail.
Vasil Ivanov
vasil-i@yandex.ru