1

我有一个单列数组,我想按降序排序。该数组的值范围从 0 到大约 10^14。当我对数组进行排序时

sorted = sort(A,'descend')

并尝试查看十个最大值,我发现

sorted(1:10)

给我

1.0e+14 *

5.1093

0.0000

0.0000

0.0000

等等...——显示前几个大条目告诉我只有一个非零元素,这是不正确的。但是,如果我跳过前几个条目,它们远大于数组的其余元素,我会得到

排序(8:10)=

2.9754

2.4182

2.0799

为什么显示这些前几个大数组元素会导致所有其他元素显示为零?

4

3 回答 3

2

您可能会发现sprintfnum2str任意精度打印数字更有用。

请参阅这个相关的 SO 问题

相关 Matlab 文档:

  1. http://www.mathworks.com/help/techdoc/ref/format.html

  2. http://www.mathworks.com/help/techdoc/ref/num2str.html

  3. http://www.mathworks.com/help/techdoc/ref/sprintf.html

于 2012-05-27T20:28:13.313 回答
2

列表中的第一个数字是与后面的整个数组相乘的比例因子。由于元素大小的差异,您将需要使用格式设置。尝试

    format long

或者

    format long e

看到更好的表现

于 2012-05-27T20:29:01.453 回答
1

它们显示为零是因为与第一个元素相比它们基本上为零(也就是说,它们远小于 10^14)。但即使它们显示为零,它们也不是零。尝试输入sorted(3):结果不应该为零。(编辑:你已经在上面展示了这个)。

这基本上是一个精度问题。打字format long也可能使这一点更清楚。

于 2012-05-27T20:24:59.730 回答