为什么数学常数在 powershell 中以不同的方式截断?

问题

powershell中做一些命令行数学运算,遇到了以下好奇的事情。

shell 复制代码
# "{0:f64}" -f ([Math]::PI); "{0:f48}" -f ([Math]::PI)
3.1415926535897931159979634685441851615905761718750000000000000000
3.141592653589793115997963468544185161590576171875

# "{0:f64}" -f ([Math]::E); "{0:f51}" -f ([Math]::E)
2.7182818284590450907955982984276488423347473144531250000000000000
2.718281828459045090795598298427648842334747314453125

为什么eπ被截断为不同的十进制长度(5148)?

为什么它不更接近某些偶数个字或字节(如16,32,64)?

问题解决

尽管 Pi 一直超越3.141592653589793,但那些只是幻想数字,因为 Pi 的真实值的下一位数字是2384...,但 PowerShellMath给你1159...。

Math.Pi前 16 位小数是精确的,就像 一样Math.e。

shell 复制代码
[Math].pi (64):
3.141592653589793 1159979634685441851615905761718750000000000000000
Actual Pi:
3.141592653589793 2384626433832795028841971693993751058209749445923...

[Math].e (64):
2.718281828459045 0907955982984276488423347473144531250000000000000
Actual e:
2.718281828459045 2353602874713526624977572470936999595749669676277...

如果将前 16 位数字的字符串转换为以下内容,则会获得这两个值double:

shell 复制代码
(sandbox) PS C:\Users\grismar> "{0:f64}" -f [double]"3.141592653589793"
3.1415926535897931159979634685441851615905761718750000000000000000
(sandbox) PS C:\Users\grismar> "{0:f64}" -f [double]"2.718281828459045"
2.7182818284590450907955982984276488423347473144531250000000000000

因此,它们实际上对于相同数量的初始数字是准确的,并且第 16 位数字之后的两个值都不可信。

之所以在转换为浮点数时会产生不同长度的数字字符串,是因为浮点数必须像任何数字一样使用位来定义,但与整数不同,我们无法准确定义每个实数。您可以double在其他地方查找浮点数(如 a)的详细编码方式,这将解释长度差异。

相关推荐
浮生望2 分钟前
React Router v7 实战全景:路由配置、嵌套路由、鉴权守卫与懒加载完整指南
前端
xcLeigh3 分钟前
Go入门:短变量声明的陷阱与最佳实践
java·redis·golang·教程·变量
用户938515635074 分钟前
从零在浏览器里跑 DeepSeek-R1:WebGPU + Transformer.js 全链路实战(二)
前端·javascript·typescript
青山木10 分钟前
Hot 100 --- 最小栈
java·数据结构·算法·leetcode
疯狂打码的少年13 分钟前
【数据结构】栈的应用:表达式求值(后缀表达式)
java·数据结构·笔记·算法
szephyr18 分钟前
腾讯云 ADP 智能体的 Skills 版本回滚总是回到旧配置,是缓存没清还是版本管理没开?
java·缓存·腾讯云
云烟成雨TD22 分钟前
Micrometer 系列【39】链路追踪:入门案例 | 环境准备
java·云原生·链路追踪
chuan.bai24 分钟前
Java RAG 实战(第 3 篇):从交互式聊天到多轮上下文
java·人工智能·macos·ai
雪隐28 分钟前
个人电脑玩AI-16让5060 Ti给你打工——MiniMax H3 提速实录:从"泡杯茶等视频"到"视频等你",一张 5060 Ti 的自我修养
前端·人工智能·后端
IT摆渡者36 分钟前
VM EXSI7.0存储硬盘故障处理
大数据·linux·github