[PIC®/AVR®/dsPIC®产品] 请教 有关PIC18 浮点误差

[复制链接]
 楼主| cr315 发表于 2025-4-11 18:20 | 显示全部楼层 |阅读模式
请教 有关PIC18 浮点误差最近用PICC 9.66 ,
  设为  long  double  xx
         u32   yy;
           xx=0.12345678;
          xx*=100000000;
         yy=(u32) xx;

   然后 显示yy  ,发现等于  12345732  ,与原来的数有 百万分之 3的误差,请问 这是为何呢?  编译中 已用32bit的浮点
暖心小太阳 发表于 2025-4-11 20:41 | 显示全部楼层
是不是浮点数的表示范围超出了32位浮点数的精度范围
幻想收藏家 发表于 2025-4-11 22:31 | 显示全部楼层
在浮点数转整数时,可能会因为四舍五入或者截断导致误差
复古留声机 发表于 2025-4-12 08:56 | 显示全部楼层
浮点数运算本身就有精度问题
逆鳞风暴 发表于 2025-4-12 16:42 | 显示全部楼层
可以尝试在其他硬件平台上运行相同的代码看看结果是否一致
不想起床喵星人 发表于 2025-4-12 23:31 | 显示全部楼层
可以尝试用更高精度的数据类型来存储中间结果
lcczg 发表于 2025-4-16 15:27 | 显示全部楼层
yy也定义成浮点吧,类型一致。然后结果如何?
玛尼玛尼哄 发表于 2025-4-17 18:04 | 显示全部楼层
你这四舍五入了?应该向高精度的强制转换。
喂什么玩意 发表于 2025-4-25 16:02 | 显示全部楼层
PIC18 系列微控制器并没有硬件浮点单元(FPU),这意味着所有的浮点运算都需要通过软件模拟进行。这会导致浮点运算相对较慢,且可能会有一些精度丢失。
喂什么玩意 发表于 2025-4-25 16:05 | 显示全部楼层
当你使用 32-bit 浮点数 时,它其实是采用了 IEEE 754 标准的单精度浮点格式(32-bit)。而当你选择 long double 类型时,它通常也是 32-bit 浮点数(除非你的编译器在某些特定平台下支持更大的浮点格式)。
喂什么玩意 发表于 2025-4-25 16:48 | 显示全部楼层
浮点数(无论是 float、double 还是 long double)是基于近似值来表示实数的,它的存储方式无法精确表示所有小数,因此会存在误差。
喂什么玩意 发表于 2025-4-25 17:11 | 显示全部楼层
long double 的精度通常为 64 位,但如果在 PICC 9.66 编译器中它实际上使用的是 32 位浮点数(单精度浮点数),那么它的精度就受限于 IEEE 754 单精度浮点数 的表示范围,能表示的有效数字最多为 7-8 位十进制数字。
拿走一光年 发表于 2025-7-9 20:16 | 显示全部楼层
PIC18 浮点误差源于计算机以二进制表示浮点数,尾数有限,导致舍入和截断误差
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1450

主题

4812

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部