MATLAB分部......应该29/128返回0?

时间:2010-09-11 02:40:11

标签: matlab division integer-division

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

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

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

val =

   29

bucketSize =

   128

pos =

   0

我错过了什么?

4 个答案:

答案 0 :(得分:16)

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

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

  

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

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

答案 1 :(得分:11)

尝试:

double(val)/double(bucketSize)

答案 2 :(得分:1)

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

答案 3 :(得分:0)

这些变量可能是整数而不是双数或长数。 1/2返回.5?其他操作有效吗?

相关问题