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

jak*_*kev 6 matlab division integer-division

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

val = I(i,j)
bucketSize    
pos = val / bucketSize
Run Code Online (Sandbox Code Playgroud)

I只是一个我从中获取价值的矩阵.这是MATLAB的输出:

val =

   29

bucketSize =

   128

pos =

   0
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

gno*_*ice 16

我的猜测是,你的矩阵I是由加载像素数据的图像文件,这将具有典型值8位无符号整数.如已经提到的,两个变换的整数值到双精度值将确保MATLAB执行浮点除法,而不是整数除法(将四舍五入的结果).

将一个值转换为双精度是不够的:

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

如果您想在MATLAB中找到有关不同数值数据类型的更多信息,可以查看此文档.


Ami*_*irW 11

尝试:

double(val)/double(bucketSize)
Run Code Online (Sandbox Code Playgroud)