8 floating-point precision matlab rounding
我是MATLAB的初学者.这是问题所在:
>> a = floor(7/2.5)
a =
2.00
>> b = rem(7,2.5)
b =
2.00
>> c = floor(b/2)
c =
0
Run Code Online (Sandbox Code Playgroud)
c应该是1,对吗?为什么是0 ???
如果直接输入b = 2,则不同如下:
>> b = 2
b =
2.00
>> c = floor(b/2)
c =
1.00
Run Code Online (Sandbox Code Playgroud)
Mar*_*ijn 11
用两个词来说:截断错误.
你是对的,c在精确算术中应该是1.0.但是,由于你在rem的参数中使用了一个浮点数,你得到了一个浮动的答案.显然,b不是2,而是2.0,这意味着它是一个非常接近2的双倍.因此,b/2变为双1.0,显然在这种情况下它的值略小于1,给你一个0作为整数值.如果要防止这种情况,请同时使用floor和ceil,然后比较这些值.
如果要将答案转换为整数,只需使用round而不是floor.
如果添加该行
d = b-a
Run Code Online (Sandbox Code Playgroud)
在你的例子中,你会看到结果
d =
-4.4409e-016
Run Code Online (Sandbox Code Playgroud)
意思是Matlab计算了一个接近但不完全是2的数字.这在使用浮点数时会出现相当多的问题.尝试
help eps
Run Code Online (Sandbox Code Playgroud)
欲获得更多信息.
| 归档时间: |
|
| 查看次数: |
3455 次 |
| 最近记录: |