Но есть у меня один вопрос...


Обыкновенные дроби - это, несомненно, хорошо, но что, если мы хотим работать с точными десятичными дробями?

К счастью, другие добрые люди написали для этого библиотеку decimal.


from decimal import *


x = Decimal('0.1')
x
Decimal('0.1')
x*x
Decimal('0.01')

Вот - это другое дело. Теперь никаких ошибок! Точные вычисления!

Ну-ка, испытаем их точность:


x = Decimal('2137123999.1321123719283819235198025617246578146578167561734267841671676127465012012121327378312713778132')

x*x
Decimal('4567298987666433042.243371515')

Ой, а я ждал чего-то подлиннее...

Ах ну да! В числах типа Decimal ведь точность задает сам человек. А по умолчанию она равна 28.


getcontext().prec = 1000 #Зададим приличную точность

x*x
Decimal('4567298987666433042.24337151480044832888826665121719364418009176386281457691116967230385806947568035749581622863341400368024639788913639697537240679423576916089293597348958840554802212796248502825589721409424')

Ура! Заработало!


Выбери следующий вопрос: