MATLAB - 楼层问题

标签 matlab floating-point precision rounding

我是 MATLAB 初学者。问题是:

>> a = floor(7/2.5)

a =

      2.00

>> b = rem(7,2.5)

b =

      2.00

>> c = floor(b/2)

c =

         0

c应该是1吧?为什么是0???

直接输入b = 2就不一样了,如下:

>> b = 2

b =

      2.00

>> c = floor(b/2)

c =

      1.00

最佳答案

两个词:截断错误。

你是对的,c 在精确算术上应该是 1.0。但是,由于您在 rem 的参数中使用了 float ,因此您得到的答案是 float 。显然,b 不完全是 2,而是 2.0,这意味着它是一个非常接近 2 的 double 。因此,b/2 变成了 double 1.0,显然在这种情况下它的值略小于 1,所以你得到一个 0 作为整数值。如果您想防止这种情况发生,请同时使用 floor 和 ceil,然后比较这些值。

如果要将答案转换为整数,只需使用 round 而不是 floor。

关于MATLAB - 楼层问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1047578/

相关文章:

c# - 乘法时的小数精度

python - MATLAB 的 fmincon 函数的开源替代方案?

c++ - 将 Matlab 变量传输到 C

c - 浮点二进制可移植性

java - 在java中截断一个 float 和一个 double

python - 为什么Python 3字符串函数会降低 float 的精度?

python - 在形态学打开和闭合产生相同结果的情况下?

python - 面向 Python 程序员的 MATLAB

python - 将字符串转换为 int、float 或将其保留为字符串,具体取决于最佳选择

c++ - 将 uint64_t 转换为 double 时调整精度