我不明白接下来会发生什么sprintf http://www.mathworks.se/help/techdoc/ref/sprintf.html命令。
>> vpa(exp(1),53)
ans =
2.7182818284590455348848081484902650117874145507812500
>> e = 2.7182818284590455348848081484902650117874145507812500
e =
2.7183
>> sprintf('%0.53f', e)
ans =
2.71828182845904550000000000000000000000000000000000000
为什么sprintf
显示号码e
四舍五入而不是数字,我保持在第一位?
变量是双精度 http://en.wikipedia.org/wiki/Double_precision_floating-point_format 默认情况下在 MATLAB 中,因此变量e
您创建的精度仅限于双精度数,约为 16 位数字。即使您输入了更多数字,双精度数也无法准确表示所有这些额外数字,并且会四舍五入到它可以表示的最接近的数字。
EDIT:正如更详细的解释安德鲁·詹克 https://stackoverflow.com/questions/4227145/in-matlab-are-variables-really-double-precision-by-default/4227530#4227530在他的回答中这个后续问题 https://stackoverflow.com/questions/4227145/in-matlab-are-variables-really-double-precision-by-default我已发布,您选择的号码e
恰好是二进制值的精确十进制扩展。换句话说,它是附近的浮点数将四舍五入到的精确表示的值。然而,在这种情况下,小数点后大约 16 位以上的任何内容都不被认为是重要的,因为它实际上无法由双精度类型准确表示。因此,像这样的函数SPRINTF http://www.mathworks.com/help/techdoc/ref/sprintf.html将自动忽略这些小值,而是打印零。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)