查看双值时出现问题

时间:2012-01-28 18:31:12

标签: matlab floating-point double number-formatting

我在matlab控制台中查看双数据时遇到问题。实际上,我从我的数据文件导入矩阵。特定行和列的值为1.543但在控制台中,当我使用disp(x)导入的矩阵x时,它显示为1.0e+03 * 0.0002。但是,当我尝试使用disp(x(25,25))访问矩阵中的特定元素时2525是行号和列号,它显示为1.543。所以我很困惑。任何澄清。只是当我打印整个矩阵时,它显示为1.0e+03 * 0.0002

2 个答案:

答案 0 :(得分:2)

由于数据的高动态范围,会发生这种情况。 试试例如:

 x = [10^-10 10^10];
 disp(x);

结果是:

  

1.0e + 010 *
     0.0000 1.0000

看起来就像第一个值为零,但事实并非如此。与第二个相比几乎为零。这并不奇怪。尝试将小值加到大值,然后减去,得到零。这是由于浮点运算。以下表达式为true

 isequal( (x(1)+x(2)) - x(2) , 0)

可以做些什么?

1)非常高的动态范围会导致任何类型的计算出现问题。尝试了解它的来源,并在更广泛的背景下解决问题。

2)。您可以尝试设置

 format long

对于某些情况,它可以在视觉上改善的情况

答案 1 :(得分:2)

以下命令应该修复它。这只是一个显示问题,矩阵中实际值的精度不受影响:

format shortG