找回密码
 立即注册
查看: 395|回复: 16

讨论一下, C51 的单精度浮点数, 实际应用中, 精度是否够???

[复制链接]
  • TA的每日心情
    开心
    7 小时前
  • 签到天数: 136 天

    [LV.7]常住居民III

    37

    主题

    870

    回帖

    3960

    积分

    荣誉版主

    积分
    3960
    发表于 2024-1-17 17:10:57 | 显示全部楼层 |阅读模式
    众多周知, 标准单精度浮点数, 尾数 24位, 相当于有效值 7位十进制精度.


    标准双精度浮点数, 尾数 53位, 相当于有效值 15位十进制精度.




    C251 可以自由选择 单精度 或 双精度浮点数.


    而 C51 仅支持 单精度浮点数. 有效位数低于 long 类型(最大9位十进制精度).


    是否有必要 在 C51 上, 搞个 准双精度(非标单精度)浮点数 ?


    方案1: 指数不变, 动态范围不变, 尾数增加 8位, 即尾数 24+8=32, 相当于有效值 9位十进制精度(达到 long 类型, 最大9位十进制精度, 速度快).


    方案2: 指数不变, 动态范围不变, 尾数增加 16位, 即尾数 24+16=40, 相当于有效值 12位十进制精度(超越 long 类型, 缺点, 比较占内存, 速度略慢).




    计划这两个方案, 2选1, 优先在


    采用 MDU32CSTC8H2K32USB-45I 上实现.






    ======================== 广  告 ========================


    采用 MDU32C, PWM硬件移相的 STC8H2K32USB-45I-LQFP32/TSSOP28/TSSOP20


    ===在最后制图阶段,即将流片,春节后供货

    1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
    回复 送花

    使用道具 举报

  • TA的每日心情
    无聊
    2 小时前
  • 签到天数: 150 天

    [LV.7]常住居民III

    137

    主题

    188

    回帖

    1619

    积分

    金牌会员

    积分
    1619
    发表于 2024-1-17 18:01:10 | 显示全部楼层
    实现不了,keil c51最大数据只能是4个字节,这是硬件决定的

    点评

    keil c51最大数据只能是4个字节, 这是软件(C51) 限制的, 与硬件无关. 理论上, 51实现 double(float64)甚至 float128, 都是 100% 可行的 (只是速度特慢)  详情 回复 发表于 2024-1-18 02:27
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 10:39
  • 签到天数: 151 天

    [LV.7]常住居民III

    9

    主题

    305

    回帖

    3725

    积分

    荣誉版主

    积分
    3725
    发表于 2024-1-17 18:47:47 | 显示全部楼层
    没有必要搞非标准化的东西
    有需要可以增加double(float64)甚至float128,这样两边都省事

    点评

    理论上是这样, 确实, 但 51芯片的 局限性, 软件模拟 double(float64)计算, 速度实在太慢了, float 计算, 精度又略显不足, 故想搞个 界于 两者之间的~~~  详情 回复 发表于 2024-1-18 02:32
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    7 小时前
  • 签到天数: 136 天

    [LV.7]常住居民III

    37

    主题

    870

    回帖

    3960

    积分

    荣誉版主

    积分
    3960
     楼主| 发表于 2024-1-18 02:27:07 | 显示全部楼层
    QQ624353765 发表于 2024-1-17 18:01
    实现不了,keil c51最大数据只能是4个字节,这是硬件决定的

    keil c51最大数据只能是4个字节, 这是软件(C51) 限制的, 与硬件无关.

    理论上, 51实现 double(float64)甚至 float128, 都是 100% 可行的 (只是速度特慢)
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    7 小时前
  • 签到天数: 136 天

    [LV.7]常住居民III

    37

    主题

    870

    回帖

    3960

    积分

    荣誉版主

    积分
    3960
     楼主| 发表于 2024-1-18 02:32:06 | 显示全部楼层
    kksk 发表于 2024-1-17 18:47
    没有必要搞非标准化的东西
    有需要可以增加double(float64)甚至float128,这样两边都省事 ...

    理论上是这样, 确实,

    但 51芯片的 局限性, 软件模拟 double(float64)计算, 速度实在太慢了,

    float 计算, 精度又略显不足, 故想搞个 界于 两者之间的~~~

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    4

    主题

    85

    回帖

    640

    积分

    高级会员

    积分
    640
    发表于 2024-1-18 04:35:25 | 显示全部楼层
    This info may help those wanting 64bit (8 byte) support, SDCC added that in 2018.

    February 26, 2018 SDCC 3.7.0 Released
    64-bit integers (long long) for the mcs51 and ds390 backends  (int64_t, uint64_t)

    点评

    Early single precision floating-point numbers in C51 were non reentrant (using simulation stacks), but later optimized to be reentrant (all other transcendental functions were non reentrant). There  详情 回复 发表于 2024-1-26 08:18
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9284

    回帖

    1万

    积分

    管理员

    积分
    14050
    发表于 2024-1-18 08:00:44 | 显示全部楼层
    老许,兼顾SDCC, 这是 51世界的 天然盟友
    ===我们3个月后,会去发展 SDCC 支持我们强大的双数据指针
    ===为了我们STC8 强大的双数据指针, 我们会扛起 SDCC 发展的大旗


    截图202401180759239381.jpg

    【SDCC + VSCode】 本地下载 - SDCC, IAR C++ for STC8, GCC, VSCode,Linux, MacOS - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)


    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9284

    回帖

    1万

    积分

    管理员

    积分
    14050
    发表于 2024-1-18 08:16:35 | 显示全部楼层
    下面有 IAR C++ for 8051 的头文件


    截图202401180815525132.jpg


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    前天 08:41
  • 签到天数: 134 天

    [LV.7]常住居民III

    20

    主题

    1039

    回帖

    2459

    积分

    金牌会员

    积分
    2459
    发表于 2024-1-18 09:30:49 | 显示全部楼层
    建议别搞非标,,,移殖很麻烦,,

    点评

    不考虑移植(也没必要移植), 本身 就是 51 专用  详情 回复 发表于 2024-1-18 10:43
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    无聊
    2 小时前
  • 签到天数: 150 天

    [LV.7]常住居民III

    137

    主题

    188

    回帖

    1619

    积分

    金牌会员

    积分
    1619
    发表于 2024-1-18 09:57:21 | 显示全部楼层
    LAOXU 发表于 2024-1-18 02:27
    keil c51最大数据只能是4个字节, 这是软件(C51) 限制的, 与硬件无关.

    理论上, 51实现 double(float64) ...

    你硬件那么牛有什么用,软件不支持用都不用考虑硬件问题,直接没硬件什么事

    点评

    这个本身就是软件(程序)模拟实现的  详情 回复 发表于 2024-1-18 10:42
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-2 10:32 , Processed in 0.081660 second(s), 75 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表