
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.87] |
![]() |
|
Сообщ.
#1
,
|
|
|
Привет. Сделал, на masm32, арифмометр - а он не хочет работать с числами меньше еденицы. Да и округляет как-то странно. Посоветуйте - что не так или, хотя-бы - где не так. Код выкладывать не буду, прицеплю архив.
Прикреплённый файл ![]() |
Сообщ.
#2
,
|
|
|
Так у вас после определения '.' начинается беда. Смотрите:
12345.1111 -> (((1 * 10 + 2) * 10 + 3) * 10 + 4) * 10 + 5) + 0.1 * 5 + 0.01 * 5 + 0.001 * 5 + 0.0001 * 5 Вот что вы вычисляете. После фиксации . (с метки drob) вы не переводите символ в цифру, а используете последнее значение. Как вариант ![]() ![]() mov dl,al ; копируем символ *** новая строка and al,0Fh ;преобразуем символ *** 17 строка файла asc2float.inc movzx eax,al ;расширяем его mov [edi],eax ;и сохраняем cmp dot,0 ;была точка? *** 13 строка файла asc2float.inc jg drob ;да (dot > 0) cmp dl,"." ;это точка? *** используем скопированный символ, а не подготовленный из al/eax je c_dot ;да |
![]() |
Сообщ.
#3
,
|
|
Я бы не советовал использовать FPREM. Она-таки для другого. Чем FRNDINT не угодила?
Добавлено 4 знака после запятой жёстко зашито в коде. Режим округления никак не используется. Из-за FPREM, в общем-то. Добавлено И да, "великолепное" разделение по .inc. Кто так учил делать? О процедурах или хотя бы макросах ничего не рассказывали? |
Сообщ.
#4
,
|
|
|
Цитата macomics @ После фиксации . (с метки drob) вы не переводите символ в цифру, а используете последнее значение. Благодарю за подсказку - как обойти разделительный символ. Я перенёс обработку символов в начало "cycl" и всё заработало. Добавлено Цитата Qraizer @ И да, "великолепное" разделение по .inc. Главное - удобно...и работает ![]() |
![]() |
Сообщ.
#5
,
|
|
Цитата cupoma58 @ Нет. Удобно работать с конкретными сущностями, а не фрагментами их кусков. Я потратил три попытки понять, что там написано. Если б всё было оформлено по правилам, ответ был бы уже через полчаса, а не когда у меня нашлось время.Главное - удобно... Цитата cupoma58 @ Это вообще не аргумент. Подстановка на уровне текстовых фрагментов игнорирует любые языковые правила. Что такое макросы на препроцессоре и во что порой выливается их отладка, причём написаны они правильно и работают везде, по почему-то кроме как вот тут, тебе любой Cшник расскажет в красках. Т.к. фрагменты собираются в кучу без всякого контроля грамматическими конструкциями языка, ты вынужден контролировать это самостоятельно, компилятор тут тебе не помощник. ...и работает |