You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Sagemath中提取数字的第n位?求解pi+e的第13787位

如何在SageMath中提取数字的第n位(以π+e的第13787位为例)

你遇到的问题核心是对SageMath中n(digits=...)方法的参数理解有误——这里的digits指的是有效数字,而非小数点后的位数!这直接导致你的计算逻辑出现偏差,得到了错误的0。

先分析你的代码问题

π+e的近似值是5.834...,整数部分占1位有效数字。当你调用xi.n(digits=13786+1)时,得到的是13787位有效数字,其中小数点后只有13786位;而xi.n(digits=13787+1)是13788位有效数字,小数点后13787位。两者相减后再放大,由于有效数字的末尾精度限制,差值被截断为0,自然得不到正确的9。

两种正确的实现方法

方法一:字符串处理法(直观易懂)

通过将高精度数值转换为字符串,直接定位到目标小数位:

# 计算π+e,确保精度覆盖到第13787位小数(额外多算5位避免截断误差)
xi = e + pi
# 获取包含整数部分+13787+5位小数的高精度字符串
total_digits = len(str(xi.trunc())) + 13787 + 5
xi_str = xi.n(digits=total_digits).str()
# 分割整数和小数部分
integer_part, decimal_part = xi_str.split('.')
# 第13787位小数对应decimal_part的第13786个索引(字符串索引从0开始)
target_digit = decimal_part[13786]
print(target_digit)  # 输出9

方法二:数值计算法(纯数值操作)

通过分离小数部分、放大取整再取模的方式提取目标位:

xi = e + pi
# 提取小数部分(减去整数部分)
fractional_part = xi - xi.trunc()
# 将小数部分放大10^13787倍,取整数后模10得到最后一位,就是目标数字
target_digit = (fractional_part * 10^13787).trunc() % 10
print(target_digit)  # 输出9

这两种方法都能准确得到π+e的第13787位小数9,你可以根据需求选择使用。

内容的提问来源于stack exchange,提问作者PatrickSteiner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:45:16