Python 3.1 The decimal module continues to puzzle me from time to time. Here's one of those. I want to use Alex Martelli's factory function as much as possible. Turns out it has a problem with precision in addition and multiplication.
========================================= from decimal import Decimal as D import decimal #Alex Martelli's factory function from 'Python in a Nutshell', 2nd ed., p.373 def d(x): return decimal.Decimal(str(x)) decimal.getcontext().prec = 55 print('power') a = D('123.2345274523452345235432452345')**D('2.3') a2 = d(123.2345274523452345235432452345)**d(2.3) print('a =', a) print('a2 =', a2) print() print('addition') x = D('123.2345274523452345235432452345')+D('2.3') x2 = d(123.2345274523452345235432452345)+d(2.3) print('x =', x) print('x2 =', x2) print() print('division') y = D('123.2345274523452345235432452345')/D('2.3') y2 = d(123.2345274523452345235432452345)/d(2.3) print('y =', y) print('y2 =', y2) print() print('multiplication') z = D('123.2345274523452345235432452345')*D('2.3') z2 = d(123.2345274523452345235432452345)*d(2.3) print('z =', z) print('z2 =', z2) ================================= =============Output================ power a = 64370.15122802469152726635110412345417588163863981991324 a2 = 64370.15122760993409213289215777394902129746619501742003 addition x = 125.5345274523452345235432452345 x2 = 125.534527452 division y = 53.58022932710662370588836749326086956521739130434782609 y2 = 53.58022932695652173913043478260869565217391304347826087 multiplication z = 283.43941314039403940414946403935 z2 = 283.4394131396 =========end of Output======================= Why in the world does precision not work for addition and multiplication (see x2 and z2)? Thanks, Dick Moores _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor