zoukankan      html  css  js  c++  java
  • 单片机为32bit时运算中64bit运算中遇到的bug及其规避手段

    在单片机运算中。一般只能处理32bit的运算。在有些场合,不得不处理64bit的运算的时候。
    发现编译器也是支持的。编译器应该是通过软件实现的。

    设想一种场合,要对一个32bit的数进行乘以0xffffffff的操作。

    方式1:
    //先定义一个 numTmp_64bit
    numTmp_64bit = numA_32bit*0xff;
    numTmp_64bit *= 0xffffff;
    
    方式2:
    //先定义一个 numTmp_64bit
    numTmp_64bit = numA_32bit*0xffff;
    numTmp_64bit *= 0xffff;
    
    方式3:
    //先定义一个 numTmp_64bit
    numTmp_64bit = numA_32bit*0xffffff;
    numTmp_64bit *= 0xff;
    
    方式4:
    //先定义一个 numTmp_64bit
    numTmp_64bit = numA_32bit;
    numTmp_64bit *= 0xffffffff;
    

    通过实测发现,方式1、方式2和方式3均存在不同程度的错误,准确度丢失等问题。

    只有方式4正常,是一种对运算过程中出现的莫名其妙的错误的一种规避手段。以上讨论对于有符号无符号均适用。

    测试环境:32bit的powerpc单片机,编译器为gcc或者dcc。

  • 相关阅读:
    Selenium(Python)等待元素出现
    java文件的I/O
    Map的四种遍历方式
    模板类实现链表
    字符串相关库函数使用
    动态规划之背包问题
    最长递增子序列
    深度优先搜索(DFS),逃离迷宫
    素数环问题(递归回溯)
    枚举(百鸡问题)
  • 原文地址:https://www.cnblogs.com/praiseslow/p/10979866.html
Copyright © 2011-2022 走看看