这实际上与Python无关-
使用硬件的二进制浮点算法,您会在任何语言中看到相同的行为。首先阅读文档。
阅读完这些内容后,您将更好地理解,您 没有 在代码中添加百分之一。这正是您要添加的内容:
>>> from decimal import Decimal>>> Decimal(.01)Decimal('0.01000000000000000020816681711721685132943093776702880859375')该字符串显示二进制浮点数的精确十进制值(C中的“双精度”),精确到十进制值0.01。您真正添加的东西比1/100大。
控制浮点数值错误是一个称为“数值分析”的字段,它是一个非常大而复杂的主题。只要您对浮点数仅是十进制值的近似值感到震惊,请使用该
decimal模块。这将为您消除一个“浅”问题的世界。例如,对您的函数进行以下小的修改:
from decimal import Decimal as Ddef sqrt(num): root = D(0) while root * root < num: root += D("0.01") return root然后:
>>> sqrt(4)Decimal('2.00')>>> sqrt(9)Decimal('3.00')它并不是真的更准确,但是在简单的示例中可能并不那么令人惊讶,因为现在它 正好 增加 了 一百分之一。
另一种选择是坚持使用浮点数,然后添加一些 可
精确表示为二进制浮点数的值:form的值
I/2**J。例如,代替添加0.01,而添加0.125(1/8)或0.0625(1/16)。
然后查找“牛顿法”以计算平方根;-)



