1

简而言之,我的问题是:

Matlab 中的双精度数真的是双精度数,还是具有附加属性的类可以充当整数?

这是问题的背景和动机:)

>> 1:4
ans =
     1     2     3     4
>> class(ans)
ans =
double

只是这样做会产生双重...

>> 1.00:4.00
ans =
     1     2     3     4
>> class(ans)
ans =
double

...就像这样,即使它被打印为整数。

数字的浮点性质仅在引入更大的数字不确定性时显示。

>> acosd(cosd(1:4))
ans =
     0.999999999999900   1.999999999999947   3.000000000000045   4.000000000000041

Matlab 中的双精度数真的是双精度数,还是具有附加属性的类可以充当整数?


用“整数”定义的向量(当然实际上是双精度数),它可以用来索引另一个向量,这通常是整数的属性。

>> A = [9 8 7 6]
A =
     9     8     7     6
>> idx = [4 3 2 1]
idx =
     4     3     2     1
>> class(idx)
ans =
double
>> A(idx)
ans =
     6     7     8     9

我也试过A(acosd(cosd(1:4)))哪个不起作用。

4

2 回答 2

5

它只是一个双倍,但您的命令提示符format为您提供了最紧凑的视图。具体来说,

format short

但是您可以将其更改为始终显示小数,以及很多小数,使用

format longEng

format帮助页面上还有许多其他选项。

有趣的是,您可以使用非整数作为colon运算符的索引,但它会发出警告。我会认真对待这个警告,因为这种索引行为很奇怪。

正如我在评论中提到的那样,MATLAB 可以使用doubles 进行索引的原因与可以在 MATLAB 中指定的不丢失精度的整数的最大值有关。双精度(64 位)浮点数可以精确表示最大为 2^53 (9,007,199,254,740,992) 的整数,而不会丢失任何精度。MATLAB 允许的最大数组大小远低于此数字,因此不存在因浮点精度而导致索引错误的风险。

于 2013-11-11T23:39:27.580 回答
4

在 MATLAB 中,所有数字文字(即程序文本中的数字)都被解释为双精度。您必须显式转换它们才能获得任何其他类型。值得记住的是,IEEE 浮点可以精确地表示大范围的整数值,最高可达FLINTMAX

于 2013-11-12T10:18:12.427 回答