请考虑以下代码:
0.1 + 0.2 == 0.3 -> false
Run Code Online (Sandbox Code Playgroud)
0.1 + 0.2 -> 0.30000000000000004
Run Code Online (Sandbox Code Playgroud)
为什么会出现这些不准确之处?
我需要计算一些数字的平方根,例如\xe2\x88\x9a9 = 3和\xe2\x88\x9a2 = 1.4142。我怎样才能用Python做到这一点?
输入可能都是正整数,并且相对较小(比如小于十亿),但万一它们不是,有什么可能会破坏吗?
\n注意:这是在 Meta 上讨论现有同标题问题后对规范问题的尝试。
\n有关的
\n在python或标准库中是否存在整数平方根?我希望它是准确的(即返回一个整数),并且如果没有解决方案则吠叫.
目前我推出了自己的天真的:
def isqrt(n):
i = int(math.sqrt(n) + 0.5)
if i**2 == n:
return i
raise ValueError('input was not a perfect square')
Run Code Online (Sandbox Code Playgroud)
但它很难看,我不相信大整数.如果我超过了这个值,我可以遍历正方形并放弃,但我认为做这样的事情会有点慢.另外我想我可能正在重新发明轮子,这样的东西肯定已经存在于python ......