Да прибавить 0.5 ко второму CD32 это правильно.
И ещё вопрос: в чём великая задумка fDIV(x, x) и последующего fMUL в самом начале? По-моему, эти блоки лишние.
Вид для печати
привычка программиста - отсекать неправильные значения... (т.н. "защита от дурака")
x/x=1 при x!=0, и в ПР x/x=0 при x=0
т.е. ещё когда не было ни строчки ниже первого блока, я вставил эту проверку, что бы обнулить выход когда x=0
(изначально я предполагал, что на выходе может быть случайное значение)
PS по этой же причине я делаю проверку x=1, и если это так, то умножаю ответ на 0
Блин. Есть же стандарты на то, что должно получаться при 0/0.
Интересно, ОВЕН во всех своих приборах теперь будет воспроизводить багу с 0/0=0?
По-моему, выглядит хлипковато, даже, если и работает на текущем железе.
Ошибочные числа вида NaN / inf на общей схеме видно. А про 0 далеко не сразу скажешь, что это признак "ошибки".
Ну, выйдет какое-нибудь ПР440 на другом процессоре. Там тоже будет 0/0=0?
Если уж и делать "защиту от ln(0)", то лучше ставить всем понятное fGT(1e-37). Т.е., если исходное значение меньше 1e-37 (ну или чему там +0 равен), то возвращать -infinity. Всем понятно, и без завязок на конкретное ПР с его 0/0.
Уже обсуждался этот вопрос на этом форуме.
Народ ожидает что 0*x должен быть всегда 0, даже если x=∞, т.к. умножение часто используется как вещественное SEL.
То же самое и с делением.
PS скорее всего до этого всё работало так как Вы хотите....
PPS ещё в МК-61 была функция знак(х), на ПР её можно смоделировать как x/|x|
так что мне нравится текущее положение дел...
Лучше бы fSEL сделали, если реально 0/0=0 делали для того, чтобы использовать fMUL как fSEL... Но сейчас налетят модераторы и начнут сообщения удалять.