1

降順で並べ替えたい 1 列の配列があります。配列には、0 から約 10^14 までの範囲の値があります。配列をソートすると

sorted = sort(A,'descend')

上位 10 個の値を調べてみると、

sorted(1:10)

私にくれます

1.0e+14 *

5.1093

0.0000

0.0000

0.0000

など... -- これらの最初のいくつかの大きなエントリを表示すると、ゼロ以外の要素が 1 つしかないことがわかりますが、これは正しくありません。ただし、残りの配列要素よりもはるかに大きい最初のいくつかのエントリをスキップすると、次のようになります。

ソート済み(8:10) =

2.9754

2.4182

2.0799

これらの最初のいくつかの大きな配列要素を表示すると、他のすべての要素がゼロとして表示されるのはなぜですか?

4

3 に答える 3

2

リストの最初の数値は、後続の配列全体を乗算する倍率です。要素の大きさが異なるため、フォーマット設定をいじる必要があります。試す

    format long

また

    format long e

より良い表現を見るために

于 2012-05-27T20:29:01.453 に答える
2

数値を任意の精度で出力するのに役立つsprintf場合があります。num2str

この関連する 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 に答える
1

これらは、最初の要素と比較すると本質的にゼロであるため (つまり、10^14 よりもはるかに小さい)、ゼロとして表示されます。ただし、ゼロと表示されていても、ゼロではありません。と入力してみてくださいsorted(3)。結果はゼロであってはなりません。(編集:これはすでに上で示しました)。

基本的に精度の問題です。タイピングformat longすると、これがより明確になる場合もあります。

于 2012-05-27T20:24:59.730 に答える