自学内容网 自学内容网

matlab 小数取余 rem 和 mod有 bug

前言

在 Matlab 代码中mod(0.11, 0.1) < 0.01 判断为真,mod(1.11, 0.1) < 0.01判断为假,导致出现意料外的结果。

结果发现被除数小于1的话会出现这些结果,被除数是大于1的小数不会。猜测应该是数据保存的精度问题。

知乎的回答解释

在这里插入图片描述

Matlab取余函数

1 mod 函数

matlab 文档——mod除后的余数(取模运算)

1.1 命令行输入

t=0; for i =0:50, t=t+0.01; if mod(t,0.1) <0.01; fprintf('t的值:%.3f\n',t),end,end;

1.2 命令行输出

会出现不想要的值 0.110

在这里插入图片描述

2 rem 函数

matlab 文档——rem 除后的余数

2.1 命令行输入

t=0; for i =0:50, t=t+0.01; if rem(t,0.1) <0.01; fprintf('t的值:%.3f\n',t),end,end;

2.2 命令行输出

会出现不想要的值 0.110

在这里插入图片描述

分析原因

mod 和 rem 函数得到的 0.0100 和 0.01 比较出错,返回的是真。

在这里插入图片描述
在这里插入图片描述

注意

  1. Matlab 代码中不加分号会默认再命令行窗口打印该变量结果

  2. mod 函数生成一个为零或与除数具有相同符号的结果。
    rem 函数生成一个为零或与被除数具有相同符号的结果。

在这里插入图片描述


原文地址:https://blog.csdn.net/weixin_42899627/article/details/140647667

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!