Thanks Rob. How would one initialize a Decimal with something like pow(2,256)?
On Tue, Jan 7, 2020 at 5:25 PM Rob Gaddi <rgaddi@highlandtechnology.invalid> wrote: > On 1/7/20 3:47 PM, Shashank Tiwari wrote: > > In Python3 an operation as follows: > >>>> 10135.1941 * (10**8) > > gives the result: 1013519410000.0001 > > > > Similarly, using the pow function also gives the same overflow/underflow > > error. > >>>> 10135.1941 * pow(10,8) > > 1013519410000.0001 > > > > Like multiplication, division of large or very small floating point > numbers > > gives similar overflow/underflow errors. > > > > Usage of Decimal doesn't seem to fix it either. > >>>> from decimal import * > >>>> Decimal(10135.1941 * pow(10,8)) > > Decimal('1013519410000.0001220703125') > >>>> Decimal(10135.1941)*pow(10,8) > > Decimal('1013519410000.000061700120568') > >>>> Decimal(10135.1941) * Decimal(pow(10,8)) > > Decimal('1013519410000.000061700120568') > >>>> Decimal(10135.1941 * (10**8)) > > Decimal('1013519410000.0001220703125') > > > > How could one do high precision multiplication and division of floating > > points numbers (decimals) in Python3 without any overflow/underflow > errors? > > > > Thanks, Shanky > > > > You've already polluted your Decimal with floating-point roundoff error > before > you even multiply it in any of your examples. > > >>> Decimal(10135.1941) > Decimal('10135.1941000000006170012056827545166015625') > > Initialize your Decimal from a string instead. > > >>> Decimal('10135.1941') > Decimal('10135.1941') > >>> Decimal('10135.1941') * Decimal('1e8') > Decimal('1.01351941E+12') > >>> float(_) > 1013519410000.0 > -- > https://mail.python.org/mailman/listinfo/python-list > -- https://mail.python.org/mailman/listinfo/python-list