Matlab single精度与C语言float精度差异及数值准确性咨询
问题1解答:Simulink中single变量的实际值
- Simulink中使用的single变量实际值不是控制台默认显示的
0.0010444,这个数值只是Matlab默认short显示格式下的简化输出,仅保留了5位有效数字,和实际存储值无关。 - 你可以通过执行
format long g命令修改Matlab的显示精度,再打印value_float就能看到完整的存储值,和你贴出的C代码打印结果完全一致。只要你在Simulink中将该变量的类型指定为单精度,仿真时就会使用这个完整的单精度存储值,不会出现额外的截断/舍入。
问题2解答:Matlab single与C float的精度对比
- Matlab的
single类型和C的float类型精度完全一致,二者都遵循IEEE 754单精度浮点数标准:32位长度,包含1位符号位、8位指数位、23位尾数位,十进制有效数字精度均为6~7位,不存在Matlab精度更低的情况。 - 你看到的显示差异是二者默认打印规则不同导致的:C代码中你使用了足够多的小数位输出,展示了单精度能表示的完整精确值;而Matlab默认
short格式仅展示前5位有效数字,调整显示格式后二者输出完全相同。
验证方法
你可以在Matlab中执行以下代码验证结果:
format long g value_double = 0.001044397222448; value_float = single(value_double)
执行后输出的value_float结果和C代码打印的0.001044397242367267608642578125000完全一致。
内容的提问来源于stack exchange,提问作者Danijel
相关产品推荐
相关产品推荐

