为什么数学常数在 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...,但 PowerShell[Math]给你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)的详细编码方式,这将解释长度差异。

相关推荐
tedcloud1233 小时前
UI-TARS-desktop部署教程:构建AI桌面自动化系统
服务器·前端·人工智能·ui·自动化·github
贫民窟的勇敢爷们6 小时前
SpringBoot整合AOP切面编程实战,实现日志统一记录+接口权限校验
java·spring boot·spring
candyTong6 小时前
Claude Code Agent Teams:多 Agent 协作的生命周期与实现机制
后端·架构
Mahir086 小时前
Redis 与 MySQL 数据同步:一致性保证的完整解决方案
数据库·redis·mysql·缓存·面试·数据一致性
UXbot6 小时前
AI原型设计工具如何支持团队协作与快速迭代
前端·交互·个人开发·ai编程·原型模式
AC赳赳老秦6 小时前
供应链专员提效:OpenClaw自动跟踪物流信息、更新库存数据,异常自动提醒
java·大数据·服务器·数据库·人工智能·自动化·openclaw
迈巴赫车主6 小时前
Java基础:list、set、map一遍过
java·开发语言
夏日听雨眠7 小时前
LInux(逻辑地址与物理地址的区别,文件描述符,lseek函数)
linux·运维·网络
灵犀学长7 小时前
基于 Spring ThreadPoolTaskScheduler + CronTrigger 实现的动态定时任务调度系统
java·数据库·spring
ZC跨境爬虫7 小时前
跟着MDN学HTML_day_48:(Node接口)
前端·javascript·ui·html·音视频