простой плавающей точкой присоединения х + у в точности с 4 (т.е. IEEE мантисса шириной 3), с 3-мя битами для показателя (emax=3
, emin=-4
) для x = mpfr('0.75')
, y = mpfr('0.03125')
неправильно дает mpfr('0.75')
как результат, когда он должен быть mpfr('0.8125')
. Обратите внимание, что 0.3125
является субнормальным числом для этого уменьшенного формата точности.Это ошибка в gmpy2 python?
Редактирование: взаимодействие терминала извлечено из ссылки и включено для дальнейшего использования.
>>> "{0:.10Df}".format(mpfr('0.75')+mpfr('0.03125'))
'0.7500000000'
>>> get_context()
context(precision=4, real_prec=Default, imag_prec=Default,
round=RoundToNearest, real_round=Default, imag_round=Default,
emax=3, emin=-4,
subnormalize=True,
trap_underflow=False, underflow=False,
trap_overflow=False, overflow=False,
trap_inexact=False, inexact=True,
trap_invalid=False, invalid=False,
trap_erange=False, erange=False,
trap_divzero=False, divzero=False,
trap_expbound=False,
allow_complex=False)
>>>
Спасибо за супер быстрый ответ. Могу ли я загрузить версию разработки, на которую вы ссылаетесь, где ошибка может быть исправлена? Это в его github [репозиторий] (https://github.com/aleaxit/gmpy)? Если да, то какую ревизию я должен проверить? – user1779685
Просто возьмите последнюю версию github. Он должен работать для тестирования этой проблемы. – casevh
Спасибо, что посмотрели на это так быстро. Я должен использовать RoundToNearest, поэтому другой режим округления не вариант для меня. Я попробовал упомянутое исправление с помощью mpq, но он не сработал: дал 0.75 еще раз. Я использую gmpy2-2.0.3. Спасибо за указание на ошибку в emax: можете ли вы упомянуть общую формулу для получения emin для общего e, p (4, похоже, относится к моему примеру?)? – user1779685