我想创建一个具有三个值 1/6、2/3 和 1/6 的向量。显然,我的 Matlab 必须将这些有理数转换为实数,但我希望它能最大限度地提高可用精度。
它将值存储为双精度值,但将它们存储为 -
b =
0.1667 0.6667 0.1667
这是精度的巨大损失。double 不应该意味着数字的小数部分的 52 位精度,为什么数字会被如此严重地截断?
我想创建一个具有三个值 1/6、2/3 和 1/6 的向量。显然,我的 Matlab 必须将这些有理数转换为实数,但我希望它能最大限度地提高可用精度。
它将值存储为双精度值,但将它们存储为 -
b =
0.1667 0.6667 0.1667
这是精度的巨大损失。double 不应该意味着数字的小数部分的 52 位精度,为什么数字会被如此严重地截断?
数字仅以这种方式显示。在内部,他们使用全精度。您可以使用该format
命令更改显示精度。例如:
长格式
将它们显示为:
0.166666666666667 0.666666666666667 0.166666666666667
所以答案很简单;没有精度损失。只是显示问题。
您可以阅读有关可用于显示数字的其他格式的文档。
您不能将值作为 1/2 或 1/4 或 1/6 存储到 Double 变量中……这些值在系统后面存储为小数;如果要存储这些值,请尝试将其存储为可行的字符串;
每当您想使用这些字符串进行数学计算时,请将值转换为数字并继续....