为什么Matlab中的find返回双精度值

3

matlab 中,find 函数返回逻辑参数为真的索引。
因此我想知道,为什么返回值(索引)的类型是double,而不是像矩阵最大索引一样是uint32uint64
另一个可能与此有关的奇怪现象是,运行以下代码:

[~,max_num_of_elem]=computer

返回变量max_num_of_elem的最大矩阵元素数量,类型为double


2
find函数可以返回索引 值。我猜你提问的是索引的数据类型,而不是值的数据类型。 - am304
哦,抱歉am304 - 当然你是对的。我会相应地修改问题。 - Bastian Ebeling
1
double 是 Matlab 的本地类型。几乎所有东西都使用它并返回它。这是一个设计选择,在许多情况下使其更容易,因为可以直接在方程中使用返回的值而无需转换它们。唯一的问题是,find 可能不适用于具有超过 2^53 个元素的矩阵。 - horchler
1
@horchler:实际上,在64位架构上的最大元素数量2^48 -1。这仍然比你所需的任何东西都要多得多,因为它相当于一个256太字节元素的向量((2^48-1)/2^40 = 256),或者一个32TB(以1024 GB为单位的)大小的double向量!请记住,在Windows上,这甚至比操作系统允许的内存限制还要大:http://msdn.microsoft.com/en-us/library/aa366778.aspx。所以我不认为这里有问题 :) - Amro
1
@Amro:那对于“find”来说是个好消息。我只是引用了最大的双精度整数,因为它们开始不再具有精确的浮点表示。 - horchler
@horchler:是的,双精度浮点数具有52+1位精度的有效数字。因此,可准确表示的整数范围为[-2^53,+2^53]。超出这个范围,每个范围[2^n,2^(n+1)]的间距开始加倍。这就是为什么eps(2^53)==2eps(2^54)==4等等.. https://en.wikipedia.org/wiki/Double-precision_floating-point_format - Amro
1个回答

6
我只能猜测,但可能是因为许多函数仅支持double类型。运行。
setdiff(methods('double'), methods('uint32'))

查看您的MATLAB版本中针对 double 定义的函数,而非 uint32

此外,在MATLAB中,整数数据类型存在溢出问题,可能会导致难以检测的错误。


1
可能也是由于历史原因,MATLAB最初只有“double”类型,直到后来的版本才引入了其他类型:http://blogs.mathworks.com/steve/2013/01/15/data-types/ - Amro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接