【问题标题】:MATLAB division... should 29/128 return 0?MATLAB 除法... 29/128 应该返回 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

我错过了什么?

【问题讨论】:

    标签: matlab division integer-division


    【解决方案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 是无类型的?如何将变量设置为双精度值?
          猜你喜欢
          • 1970-01-01
          • 2021-07-12
          • 2020-06-26
          • 1970-01-01
          • 1970-01-01
          • 2011-02-03
          • 1970-01-01
          • 2016-09-24
          • 1970-01-01
          相关资源
          最近更新 更多