鱼C论坛

 找回密码
 立即注册
查看: 1924|回复: 4

新手求助

[复制链接]
发表于 2023-4-13 15:16:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1+2j
(1+2j)
x=i+2j
x.real
1.0999999999999999
x.imag
2.0
我照着做的,为啥我的x.real值跟小甲鱼的不一样啊啊啊啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
这样就可以避免浮点数计算时的精度误差。
有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-14 10:54:26 | 显示全部楼层

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

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

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


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

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

想解决这个问题的话,可以使用楼上的 Decimal 类型来进行高精度计算。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-15 08:55:36 | 显示全部楼层
Twilight6 发表于 2023-4-14 10:54
没事,误差还和计算机实时环境有关,环境不同就更不用说了

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 17:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表