Форум сайта python.su
нашел интересную особенность :
предположим нужно 9/8888888888
как вы думаете кто прав decimal или mpmath ???
Просто интересно ваше мнение
#decimal 1.0125000001012500000101250000010125000001012500000E-9
#mpmath 0.00000000101250000010125000001012500000101250000010125
import decimal decimal.setcontext(decimal.Context(prec=50)) print(decimal.Decimal('9') / decimal.Decimal('8888888888')) #1.0125000001012500000101250000010125000001012500000E-9 #------------------------------------------------------------------------------------- from mpmath import mp mp.dps = 50 result = mp.mpf(9) / mp.mpf(8888888888) print(result) #0.00000000101250000010125000001012500000101250000010125
Отредактировано Ess (Ноя. 11, 2023 13:17:12)
Офлайн
>>> import decimal >>> >>> decimal.setcontext(decimal.Context(prec=60)) >>> decimal.Decimal('9') / decimal.Decimal('8888888888') Decimal('1.01250000010125000001012500000101250000010125000001012500000E-9') >>> >>> decimal.setcontext(decimal.Context(prec=50)) >>> decimal.Decimal('9') / decimal.Decimal('8888888888') Decimal('1.0125000001012500000101250000010125000001012500000E-9') >>> >>> len('1.0125000001012500000101250000010125000001012500000E') 52 >>>
>>> from mpmath import mp >>> >>> mp.dps = 50 >>> result = mp.mpf(9) / mp.mpf(8888888888) >>> print(result) 0.00000000101250000010125000001012500000101250000010125 >>> >>> len('0.00000000101250000010125000001012500000101250000010125') 55 >>>
EssПрав decimal.
как вы думаете кто прав decimal или mpmath ???
Отредактировано py.user.next (Ноя. 12, 2023 10:54:02)
Офлайн
py.user.nextи у decimal и у mpmath задана точность округления 50 знаков
h будет выводить и выводить что-то на экран
decimal.setcontext(decimal.Context(prec=50)) print(decimal.Decimal('9') / decimal.Decimal('88889999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999888888')) #1.0125000001012500000101250000010125000001012500000E-9 from mpmath import mp mp.dps = 50 result = mp.mpf(9) / mp.mpf(88889999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999888888) print(result)
Отредактировано Ess (Ноя. 13, 2023 10:43:00)
Офлайн
EssНу да, и поэтому mpmath выводит какую-то лишнюю ерунду. Для чего указывается фиксированная точность? Для того, чтобы дальше ничего не считалось и выводилось столько, сколько задали в этой точности. Ну decimal так и делает. А что же делает mpmath? Оно берёт эту точность, вычисляет, а потом ещё берёт что-то дополнительно после этой точности. Зачем? Она как считает, для чего ей точность задали, ограниченную вот дотуда-то? Просто так что ли? Или что? Поэтому сразу видно, что человек, который писал, у него что-то не то с головой, потому что он не понимает, зачем указывают точность. Во всех языках при указании точности последнюю цифру просто округляют по тем цифрам, которые дальше идут, за пределами заданной точности, и всё.
и у decimal и у mpmath задана точность округления 50 знаков
Отредактировано py.user.next (Ноя. 13, 2023 17:43:47)
Офлайн