MATLAB 除法... 29/128 应该返回 0 吗?

Posted

技术标签:

【中文标题】MATLAB 除法... 29/128 应该返回 0 吗?【英文标题】:MATLAB division... should 29/128 return 0? 【发布时间】:2010-09-11 02:40:11 【问题描述】:

我真的不认为这是一个精度问题,答案应该是 0.226 左右。这是确切的代码:

val = I(i,j)
bucketSize    
pos = val / bucketSize

I 只是我从中获取值的矩阵。这是 MATLAB 的输出:

val =

   29

bucketSize =

   128

pos =

   0

我错过了什么?

【问题讨论】:

【参考方案1】:

我的猜测是您的矩阵I 是从image file 加载的像素数据,其值通常为unsigned 8-bit integers。如前所述,将两个整数值转换为 double precision 值将确保 MATLAB 执行浮点除法而不是整数除法(这将对结果进行四舍五入)。

将一个值转换为double precision 是不够的:

对于一个操作数是一个整数数组的所有二元运算 数据类型(64 位整数除外),另一个是双精度标量, MATLAB 使用逐元素双精度计算运算 算术,然后将结果转换回原始整数 数据类型。

如果您想了解有关 MATLAB 中不同数值数据类型的更多信息,可以查看this documentation。

【讨论】:

【参考方案2】:

尝试:

double(val)/double(bucketSize)

【讨论】:

【参考方案3】:

我明白了,问题是我的矩阵出于某种原因包含 uint8,而不是双精度数。刚刚将 val=I(i,j) 更改为 val=double( I(i,j) ) 一切都很好。谢谢。

【讨论】:

【参考方案4】:

这些变量可能是整数而不是双精度或长整数。 1/2 是否返回 0.5?其他操作是否有效?

【讨论】:

是的。例如,29/128 得出正确答案。我的印象是 Matlab 是无类型的?如何将变量设置为双精度值?

以上是关于MATLAB 除法... 29/128 应该返回 0 吗?的主要内容,如果未能解决你的问题,请参考以下文章

matlab除法运算

什么是 MATLAB 中的双周期运算符后跟除法运算符 (../)?

如何用Matlab进行多项式除法运算

matlab矩阵里有很多有相同值的元素,如何剔除多余的,每个值只留一个元素

matlab入门——矩阵运算

Matlab多项式