为什么用pycharm算自然对数E的时候,x等于15个9和x等于14个9差这么多?
当我用pycharm算自然对数的时候我写了
x =999999999999
E = (1+(1/x))**x
print(E)
结果发现如果9的数量如果在14个以内的时候,都接近2.71,
但是当9的数量在15个的时候,就会突然跳到3.0350352065492587
请问这是为什么呢? 这不是只有 Python 会这样,正确来说应该是程序语言对于浮点数是弱项,以下为 C 语言范例:#include <stdio.h>
#include <math.h>
int main(){
double x = 99999999999999;// 14 个 9
double y = 999999999999999; // 15 个 9
double a = pow(1+1/x, x);
double b = pow(1+1/y, y);
printf("a: %lf\n", a);
printf("b: %lf\n", b);
return 0;
}结果和 Python 相同:a: 2.716110
b: 3.035035
因为乘方返回类型是浮点类型,所以相对太大就会影响其精准度:x = 999999999999999
print(type((1+(1/x))**x))<class 'float'>
浮点数采用 IEEE 754 标准规定
其储存方式分三个部分:
1.)数符(表示数值正负)
2.)阶码
3.)尾数
因为长度大小关系(分给三个部分),其精准变得有限。Python 的内置模块 decimal 可以用于加长其长度,提高一定的精准度 截图如下 from decimal import *
x = 99999999999999999
E = (1 + Decimal(1/x))**x
print(E)
参考:https://blog.csdn.net/adorable_/article/details/109577331
>>>x=1.1
>>>y=1
>>>x-y
0.10000000000000009
>>> import decimal
>>> x = decimal.Decimal('999999999999999')
>>> e = (1+1/x)**x
>>> print(e)
2.718281828459041157937544783 楼主的意思应该不是想算出 15 个 9 真正答案,而是想知道为什么会这样吧
页:
[1]