Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 在MATLAB中使用sprintf显示变量的小数

我不明白使用sprintf命令会发生的下一件事。

>> vpa(exp(1),53) ans = 2.7182818284590455348848081484902650117874145507812500 >> e = 2.7182818284590455348848081484902650117874145507812500 e = 2.7183 >> sprintf('%0.53f', e) ans = 2.71828182845904550000000000000000000000000000000000000 为什么sprintf告诉我数e四舍五入,而不是数量和我保持在首位?



回答:

在MATLAB中,变量默认double precision ,因此您创建的变量e限于double的精度,大约为16位。即使您输入了更多的数字,双精度也不能精确地表示所有这些多余的数字,并四舍五入到它可以表示的最接近的数字。

编辑:正如安德鲁·詹克Andrew Janke)在回答我发布的后续问题时更详细地解释的那样,您为e选择的e恰好是二进制值的精确十进制扩展。换句话说,它是附近浮点数将四舍五入到的可精确表示的值。但是,在这种情况下,小数点后超过16位的任何数字都不会被认为是有效的,因为它不能真正由双精度类型准确表示。因此,像SPRINTF这样的函数将自动忽略这些较小的值,而是打印零。



更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 10:30


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.