Предположим, что я рассматриваю M=N**2
, где N
- целое число. Похоже, что numpy.sqrt(M)
возвращает float (на самом деле numpy.float64).Безопасность принятия `int (numpy.sqrt (N))`
Я мог представить, что может быть случай, когда он возвращает, скажем, N-10**(-16)
из-за проблем с числовой точностью, и в этом случае int(numpy.sqrt(M))
будет N-1
.
Тем не менее, в моих тестах есть N==numpy.sqrt(M)
, возвращающий True
, так что похоже, что этого приближения не происходит.
Можно ли считать, что int(numpy.sqrt(M))
действительно точна, когда M
- идеальный квадрат? Если да, то для бонуса, что происходит в фоновом режиме, что заставляет его работать?
Нет, если это float64, это будет правильно примерно ~ 20 мест, которые * много *, но не идеальный. Есть способы взять int sqrt ... –
См. Http://stackoverflow.com/questions/15390858/weird-behaviour-of-np-sqrt-for-large-integers и http://stackoverflow.com/questions/15390807/integer-square-root-in-python – kennytm