提问人:Elvez The Elf 提问时间:5/14/2018 更新时间:5/18/2018 访问量:2537
Python,浮点数可以有多长?
Python, How long decimal point can a float have?
问:
我做了一个圆周率计算器。但它只是更正前 7 个小数点并开始返回相同的结果。从外观上看,我的浮点值越来越大,因为我使用了限制。但是 python 中的十进制数有限制吗?我阅读了一些文档,但有些数字甚至小数点后 100 位,但我只能达到 11 位。
我的代码:
import math
import decimal
import datetime
sqrtt=1.
sumn=0.
tryc=0
outerrepeat=1000000000
while outerrepeat>0:
tryc+=1
repeat=10000000
a=datetime.datetime.now()
print "\n>>>Processing...\n"
while repeat>0:
sumn+=1/(sqrtt**2)
sqrtt+=1
repeat-=1
b=datetime.datetime.now()
print ">>>Process complete.\n"
print ">>>Calculate time: "+str(b-a) + " Try-" + str(tryc) +" "+ str(math.sqrt(sumn*6)) + "\n"
outerrepeat-=1
print "\nThis is all I can do."
可能有帮助:在空闲时运行。计算由巴塞尔问题完成。总是卡在 3.14159264498。也永远不会超过小数点后 11 位,但有时会更低。应该说我的极限 (sqrtt) 达到 10 的 8 次方(可能低于但高于 10 的 7 次方。 谢谢。
答:
1赞
Håken Lid
5/14/2018
#1
在典型的 python 实现中,浮点数为 64 位,精度为 53 位。这是 15 到 17 位有效十进制数字。
https://en.wikipedia.org/wiki/Double-precision_floating-point_format
评论
0赞
Elvez The Elf
5/14/2018
谢谢,整数呢?
0赞
Tom Ron
5/14/2018
话虽如此,印刷品也修剪了一些精度——>>> math.sqrt(sumn*6) 3.1415925580959025 >>> str(math.sqrt(sumn*6)) '3.1415925581'
0赞
FHTMitchell
5/14/2018
根据定义,@ElvezTheElf整数的精度为 1。
1赞
Håken Lid
5/14/2018
当前版本的 python 中的整数没有固定的数字限制。Python 将分配足够的内存字节来存储您的整数,直到您用完 ram。
1赞
FHTMitchell
5/14/2018
#2
Python 使用 64 位浮点数,精度为 15 到 17 位十进制。
可以在这里找到证明,我们可以看到 python 值被存储为 C 双精度值(几乎总是 64 位浮点数)。float
typedef struct {
PyObject_HEAD
double ob_fval; // this is the actual float value
} PyFloatObject;
您可以使用小数。用于无限精度的 Decimal 对象。
计算 e 的示例
import decimal
import math
decimal.getcontext().prec = 100 # set the precision, can be as large as you like
e = decimal.Decimal(0)
next_e = decimal.Decimal('NaN') # init as not a number
i = 0
while e != next_e:
e, next_e = next_e, e + decimal.Decimal(1) / math.factorial(i)
i += 1
e #--> Decimal('2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166428')
评论
0赞
Elvez The Elf
5/14/2018
谢谢,你能做一个检查吗?就像我的代码一样。我真的很感激。
1赞
Håken Lid
5/14/2018
没有无限的精度。十进制具有固定精度。这就是使用它们的原因。
0赞
FHTMitchell
5/14/2018
@HåkenLid 当然,从文档中可以看出:“与基于硬件的二进制浮点不同,十进制模块具有用户可更改的精度(默认为 28 位),可以根据给定问题的需要尽可能大:”
0赞
Håken Lid
5/14/2018
您必须指定一个固定的精度。它可以比 28 大得多,但你不能有“无限”的精度。这是不可能的,因为它需要一台具有无限内存的计算机。
0赞
FHTMitchell
5/14/2018
但这是硬件限制,而不是软件限制。这与我们将 python 3 ints(python 2 longs)描述为具有无限大小的方式相同。这在计算机科学中很常见。
0赞
Superluminal
5/14/2018
#3
本教程也非常有用。浮点运算:问题和局限性
python floats 的精度以 17 位为边界。 “在运行 Python 的典型机器上,Python 浮点数有 53 位精度可用”。它不仅是python,而且是一个标准。因此,熟悉是有用的。
评论
decimal