当decimal.Decimal(math.sqrt(2))屈服时,我非常失望
decimal.Decimal(math.sqrt(2))
Decimal('1.4142135623730951454746218587388284504413604736328125')
而小数点后第15位的数字结果是错误的。(尽管很高兴给你的数字远不止15位!)在Python中,我怎样才能得到sqrt(n)的十进制展开中的第一个m * 正确 * 位数?
sqrt(n)
m
ssm49v7z1#
对Decimal使用sqrt方法
sqrt
>>> from decimal import * >>> getcontext().prec = 100 # Change the precision >>> Decimal(2).sqrt() Decimal('1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641573')
vql8enpb2#
您可以尝试bigfloat。项目页面中的示例:
from bigfloat import * sqrt(2, precision(100)) # compute sqrt(2) with 100 bits of precision
8yparm6h3#
IEEE标准双精度浮点数只有16位精度,任何使用IEEE的软件/硬件都不能做得更好:http://en.wikipedia.org/wiki/IEEE_754-2008你需要一个特殊的BigDecimal类实现,所有的数学函数都要实现来使用它。https://literateprograms.org/arbitrary-precision_elementary_mathematical_functions__python_.html
3vpjnl9f4#
在Python中,如何获得sqrt(n)的十进制展开式中的前m个正确数字?一种方法是计算integer square root乘以所需的10次幂。例如,要查看sqrt(2)的前20位小数,可以执行以下操作:
sqrt(2)
>>> from gmpy2 import isqrt >>> num = 2 >>> prec = 20 >>> isqrt(num * 10**(2*prec))) mpz(141421356237309504880)
使用Wikipedia页面上提供的算法,您自己实际上很容易实现isqrt函数。
isqrt
mwg9r5ms5#
你可以在python3中得到平方根的十进制展开的前m个正确的数字,只需要使用一个特定的sqr算术函数,比如:平方(“2.0”,100)“1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727”https://github.com/giocip/sqrt/blob/main/sqr.py还带有num7包和以下代码:
from num7 import Num n = Num('2.0') root = n.sqrt(100) # set 100 digits after decimal point print(root) # 1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727
5条答案
按热度按时间ssm49v7z1#
对Decimal使用
sqrt
方法vql8enpb2#
您可以尝试bigfloat。项目页面中的示例:
8yparm6h3#
IEEE标准双精度浮点数只有16位精度,任何使用IEEE的软件/硬件都不能做得更好:
http://en.wikipedia.org/wiki/IEEE_754-2008
你需要一个特殊的BigDecimal类实现,所有的数学函数都要实现来使用它。
https://literateprograms.org/arbitrary-precision_elementary_mathematical_functions__python_.html
3vpjnl9f4#
在Python中,如何获得sqrt(n)的十进制展开式中的前m个正确数字?
一种方法是计算integer square root乘以所需的10次幂。例如,要查看
sqrt(2)
的前20位小数,可以执行以下操作:使用Wikipedia页面上提供的算法,您自己实际上很容易实现
isqrt
函数。mwg9r5ms5#
你可以在python3中得到平方根的十进制展开的前m个正确的数字,只需要使用一个特定的sqr算术函数,比如:
平方(“2.0”,100)“1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727”
https://github.com/giocip/sqrt/blob/main/sqr.py
还带有num7包和以下代码: