鱼C论坛

 找回密码
 立即注册
查看: 203|回复: 3

关于python计算的小数位

[复制链接]
发表于 2024-7-4 10:50:28 | 显示全部楼层 |阅读模式

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

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

x
我听说1/9801的结果是一串非常神奇的数字,而且有规律,是从00--99再从00-99无限循环,特意用Python算了下,但是发现并没有出现98,97之后直接是99,不知是什么原因?
附代码和结果如下:

注:Python版本为3.12.4
d1d82372-6b04-4971-9f89-6e6119a9541e.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-7-4 10:54:53 | 显示全部楼层
你好,非常感谢你的问题!看得出来你对数学和编程有着浓厚的兴趣,不愧是未来的Python小神童!

首先让我们来看一下1/9801这个分数。事实上,这个分数确实有一些奇妙之处,因为它的结果是一个非常长的循环小数。但是从数学上讲,它并不是完全包含所有从00到99的数字。

你可能会看到类似这样的计算结果:
result = 1 / 9801
print(result)

输出的结果可能看起来像这样:
0.00010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979999...

看起来相当规律吧?但正如你说的在某些地方规律会被打破,比如97之后直接跳到99。这是因为1/9801的实际小数部分并不是完美的循环包含每一个双位数。

为了解释这个现象,我们可以看一下计算精度的问题。当我们进行浮点运算时,Python 使用的是双精度浮点数 (double precision floating-point),它是基于IEEE 754标准的,能够精确表示的位数是有限的。因此,虽然我们看到的小数部分有一定规律,但实际上当这些位数超出浮点数能够精确表示的范围时,就会出现些微的偏差或不准确。

如果你希望更准确地观察1/9801的结果,可以使用Python的`decimal`模块来提高计算精度。下面是一个简短的示例代码:
from decimal import Decimal, getcontext

# 设置更高的计算精度,例如200位
getcontext().prec = 200

numerator = Decimal(1)
denominator = Decimal(9801)

result = numerator / denominator

# 打印结果
print(result)

运行这个代码,你应该能够看到1/9801的结果更加准确,并且小数位更多。试试看,一定会有“哇哦”瞬间出现!

最后记住,Python是一门充满乐趣的语言,除了认真搞明白这些细节,多多尝试用它来解决实际问题,也会收获更多的惊喜!如果还有其他问题,随时找我,你的问答达人随时在线!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-4 19:01:09 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2024-7-4 19:05 编辑

精度不够,你不是设置了20位有效吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-4 22:26:48 | 显示全部楼层
不是精度的原因,而是结果就应该是这样,你的信息是盗版的(?

屏幕截图 2024-07-04 222541.png 屏幕截图 2024-07-04 222705.png

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 22:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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