Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我不明白使用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这样的函数将自动忽略这些较小的值,而是打印零。 更多&回答... |
![]() |
![]() |