matlab 小数取余 rem 和 mod有 bug

目录

  • 前言
  • Matlab取余函数
    • [1 mod 函数](#1 mod 函数)
      • [1.1 命令行输入](#1.1 命令行输入)
      • [1.2 命令行输出](#1.2 命令行输出)
    • [2 rem 函数](#2 rem 函数)
      • [2.1 命令行输入](#2.1 命令行输入)
      • [2.2 命令行输出](#2.2 命令行输出)
  • 分析原因
  • 注意

前言

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

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

知乎的回答解释

Matlab取余函数

1 mod 函数

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

1.1 命令行输入

matlab 复制代码
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 命令行输入

matlab 复制代码
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 函数生成一个为零或与被除数具有相同符号的结果。

相关推荐
jllllyuz32 分钟前
MATLAB 蒙特卡洛排队等待模拟程序
数据结构·matlab
机器学习之心3 小时前
VMD-KAN-Transformer:时间序列预测的“三体运动”,我们用数学与深度学习找到了最优解
matlab·回归·vmd·kan-transformer
MESMarketing6 小时前
互动分享 | 软件工具的安全合规实践
功能测试·测试工具·matlab·ci/cd·autosar
南宫萧幕7 小时前
从YALMIP工具箱到车辆工况仿真:MATLAB控制策略开发的完整实践指南
开发语言·人工智能·matlab·simulink
yong99908 小时前
基于直方图优化的图像去雾技术MATLAB实现
人工智能·计算机视觉·matlab
gihigo19988 小时前
MATLAB中实现混沌序列的相空间重构
开发语言·matlab·重构
机器学习之心8 小时前
BO-NARX贝叶斯优化非线性自回归外生模型股票价格预测,MATLAB代码
matlab·回归·贝叶斯优化非线性自回归
Evand J8 小时前
【MATLAB代码介绍】三维环境下的IMM(交互式多模型),使用CV和CT模型,EKF作为滤波,目标高精度、自适应跟踪定位
开发语言·算法·matlab·imm·代码介绍
chao1898449 小时前
具有飞行约束的无人机MPC MATLAB实现
开发语言·matlab·无人机
南宫萧幕9 小时前
从零构建飞行汽车混合动力能量管理系统(含电池、增程器与EMS策略)
matlab·汽车·控制·pid