南瓜卷 发表于 2023-4-13 15:16:16

新手求助

1+2j
(1+2j)
x=i+2j
x.real
1.0999999999999999
x.imag
2.0
我照着做的,为啥我的x.real值跟小甲鱼的不一样啊啊啊啊

sfqxx 发表于 2023-4-13 17:31:40

在Python中,浮点数的运算精度存在一定的误差。这是因为计算机在存储和处理浮点数时采用二进制表示,而有些十进制小数无法精确地转换为二进制表示,从而导致了误差。

因此,当你打印`x.real`时,可能会得到类似于`1.0999999999999999`这样的结果,而不是预期的`1.0`。这并不代表你的代码有误,而只是计算机处理过程中的舍入误差。

如果需要更加精确的浮点数计算,可以使用Python内置的decimal模块来进行高精度计算。例如:

from decimal import Decimal

x = Decimal('1') + Decimal('2j')
print(x.real)# 输出:1

这样就可以避免浮点数计算时的精度误差。
有用请设置最佳答案

Twilight6 发表于 2023-4-14 10:54:26


没事,误差还和计算机实时环境有关,环境不同就更不用说了

浮点数在计算机中是以二进制形式存储的,而二进制无法精确地表示某些十进制分数,例如 1/3 或者 0.1 等数值。

这就导致了在计算机中表示浮点数时,可能会产生舍入误差。这种舍入误差是由于二进制表示法所导致的,因为某些十进制分数在二进制表示法下可能是无限循环的。

举个例子:我们知道 1.1 + 2.2 的结果是 3.3,但是计算机的输出结果可能是 3.3000000000000003

就是因为于计算机无法精确地表示 0.1 和 0.2 这两个浮点数,从而导致了舍入误差。

想解决这个问题的话,可以使用楼上的 Decimal 类型来进行高精度计算。

南瓜卷 发表于 2023-4-15 08:53:54

sfqxx 发表于 2023-4-13 17:31
在Python中,浮点数的运算精度存在一定的误差。这是因为计算机在存储和处理浮点数时采用二进制表示,而有些 ...

谢谢

南瓜卷 发表于 2023-4-15 08:55:36

Twilight6 发表于 2023-4-14 10:54
没事,误差还和计算机实时环境有关,环境不同就更不用说了




谢谢
页: [1]
查看完整版本: 新手求助