找回密码
 立即注册
楼主: 1***

64位整数运算问题

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

    [LV.7]常住居民III

    39

    主题

    911

    回帖

    4374

    积分

    荣誉版主

    积分
    4374
    发表于 2023-2-3 08:36:18 | 显示全部楼层

    是 long long、

    该用户从未签到

    565

    主题

    9919

    回帖

    1万

    积分

    管理员

    积分
    14423
    发表于 2023-2-3 09:59:09 | 显示全部楼层
    自己写个补充的数学库

    该用户从未签到

    46

    主题

    3173

    回帖

    7169

    积分

    超级版主

    积分
    7169
    发表于 2023-2-3 10:07:16 | 显示全部楼层
    Keil C51 不支持64位整数运算double float运算
    64位整数运算可以转为单精度浮点运算,但损失一些精度,
    单精度浮点数为7位十进制有效数字位,值范围-3.4x10^38 ~ 3.4x10^38,
    在一般的工程运算已经足够,特殊要求就没办法了,
    可以用汇编写一个,用C调用。
    回复 支持 0 反对 1 送花

    使用道具 举报

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

    [LV.7]常住居民III

    39

    主题

    911

    回帖

    4374

    积分

    荣誉版主

    积分
    4374
    发表于 2023-2-3 10:44:29 | 显示全部楼层
    我抽空写一个吧~~~:)
  • TA的每日心情
    开心
    18 小时前
  • 签到天数: 171 天

    [LV.7]常住居民III

    39

    主题

    911

    回帖

    4374

    积分

    荣誉版主

    积分
    4374
    发表于 2023-2-4 07:44:44 | 显示全部楼层
    64位 定点整数, 加减乘除运算库 已基本完成,  
    64位无符号整数 运算 已经过测试,
    接下去测试 64位有符号整数 运算.

    其中 乘除法, 采用快速算法,

    使用了 c251的 硬件乘除单元, 可有效提升定点整数乘除法运算的速度.

    再次吐槽, STC32的 MDU32, 搞的太小气了,

    除了32位定点数乘除法, 一点扩展的余地都没有,
    不像 STC8的  MDU16, 搞的大气~~~
  • TA的每日心情
    开心
    18 小时前
  • 签到天数: 171 天

    [LV.7]常住居民III

    39

    主题

    911

    回帖

    4374

    积分

    荣誉版主

    积分
    4374
    发表于 2023-2-4 07:47:28 | 显示全部楼层
    否则 64位 定点整数 乘除法运算 速度. 还可大大提升, 包括 双精度数学浮点运算库的 乘除法运算 速度 , 也可大大提升
  • TA的每日心情
    开心
    18 小时前
  • 签到天数: 171 天

    [LV.7]常住居民III

    39

    主题

    911

    回帖

    4374

    积分

    荣誉版主

    积分
    4374
    发表于 2023-2-4 20:37:51 | 显示全部楼层
    64位   长整数 加/减/乘/除法 来了~~~
    推荐最新编写的 STC32G_MDU32 标准数学函数库,
    函数库, 含以下库文件.
    1. 浮点加减乘除法
    2. 32位整数乘除法(快速)
    2. 64位长整数 加/减/乘/除法
    3. ABS求绝对值.

    未命名1.JPG
  • TA的每日心情
    开心
    18 小时前
  • 签到天数: 171 天

    [LV.7]常住居民III

    39

    主题

    911

    回帖

    4374

    积分

    荣誉版主

    积分
    4374
    发表于 2023-2-4 20:39:34 | 显示全部楼层
    说明:
    一. 编写了浮点数加减乘除法, 其中浮点数除法为快速除法, 由于浮点数加减乘除法, 调用内部公共(判断溢出,处理0,规格化等)子程序,

    如仅加入 C251浮点数快速除法, 没法调用C251内部公共子程序, 使得编译后程序代码变长, 故这次浮点数加减乘除法全部加入.

    二. MDU32 所带的 32位整数乘除法(快速)

    三. Keil C251 编译器不支持 64位长整数类型, 加入64位长整数加减乘除法运算函数库, 扩大了Keil C251 编译器的应用范围.

    如需使用 64位长整数加减乘除法, 请在程序开头, 插入头文件 LONG64.h , 其他程序都是内部标准函数, 无需插入头文件.

    附带 64位长整数加减乘除法 测试程序, 请单步运行, 观察程序运行后的数学运算结果.

    四. 关于 ABS求绝对值. 上次看 STC32 官方FPMU库, 发现 8位整数转浮点数, 16位整数转浮点数, 32位整数转浮点数, 存在错误.

    顺便看了一下 Keil C251自带的 ABS函数, 发现其执行代码, 可作进一步优化, 这次将其优化后加入.

    包含 ABS, CABS, LABS, FABS 函数

    五. 官方库有点多, Large 模式和 Huge 模式 分开 两个库, 没必要, Keil 官方库, 这两种 模式, 都是合并成一个库的, 方便使用.

    而让 Keil 官方分开的库, 是根据 Memory 储存模式不同, 分别 封装 不同的库, 其最主要的区别, 是 2字节指针 和 4字节指针.

    2字节指针, 是为了兼容 51程序, 直接在 251上运行, 一般使用 Binary模式运行, 早期的芯片容量不大, 为节约内存而使用.

    现在已完全没必要了.

    STC32 采用 Source模式运行, 且芯片容量又大, 如 Memory 储存模式选择 Tiny模式, 大一点的程序就编译通不过了,

    就算通过了, 且怀疑运行是否正常? 工作是否可靠? (官方手册强调 STC32G 是 4字节指针), 当用 2字节指针, 去访问

    CODE 中的常数, 会产生什么结果? (我没测试过, 但大概率是不会有好结果的).

    因此, STC32 专用库只需要编写 支持4字节数据指针即可, 这样, 完全可以只用一个库, C251 编译器 自动识别 Large 和 Huge 模式,

    很容易的解决库程序兼容问题.

    六. 官方库编译时会产生大量警告及无用代码, 把库按照正规标准格式书写后编译, 这些警告及无用代码, 都将不会存在了.


    STC32G_LIB.rar (202.47 KB, 下载次数: 27)

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

    本版积分规则

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

    GMT+8, 2024-6-13 22:01 , Processed in 0.076142 second(s), 57 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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