在线情况
楼主
  • 头像
  • 级别
    • 积分8
    • 经验8471
    • 文章102
    • 注册2008-04-20
    讨论一个乘法数学运算式与编译器处理问题
    我的数学运算是为 (3985/4095)*2.5
    答案算出来为0,好奇怪,我改成下面的样式还是不行,都是0
    long aa;
    aa= (long)3985/(long)4095*(long)2.5;

    我使用的是f449(硬件乘法器有开没开都一样)
    [ 此贴最后由DC在2008-8-3 17:23:20编辑过 ]
    微控网感谢您的参与
    在线情况
    2
    • 头像
    • 级别
      • 积分8
      • 经验8471
      • 文章102
      • 注册2008-04-20
      [QUOTE][B]下面引用由[U]hwdz[/U]发表的内容:[/B]

      你这个问题我没有试过,因为我总是尽量避免出现这样的运算,大多数情况下,我会变成这样的方法来写:
      long aa;
      aa = 4985 * 25 / 4095 / 10;
      我写这种式子的原则就是,...[/QUOTE]

      我改成你的方式就出現
      Warning[Pe061]: integer operation result is out of range
      微控网感谢您的参与
      在线情况
      3
      • 头像
      • 级别
        • 积分8
        • 经验8471
        • 文章102
        • 注册2008-04-20
        long aa;
        aa = (3985 * 25) / 4095 / 10;
        我改成上面的樣子,就不會出錯,不過答案還是0
        IAR為3.41版
        微控网感谢您的参与
        在线情况
        4
        • 头像
        • 级别
          • 积分8
          • 经验8471
          • 文章102
          • 注册2008-04-20
          我把long aa;放在main裡也會出現
          把它放在外面當全域變量,因該就不會出現那個問題,不過答案永遠都是0
          微控网感谢您的参与
          在线情况
          5
          • 头像
          • 级别
            • 积分8
            • 经验8471
            • 文章102
            • 注册2008-04-20
            [QUOTE][B]下面引用由[U]bobo[/U]发表的内容:[/B]

             


            强制转换只能是低级的转换成高级的 你不能把一个float转换成long

             把式子转化成aa=3985*25/4095/10也无济于事 因为计算机仍然式先做3985*25的  而3...[/QUOTE]

            不過用成這樣子的形式,我到時候要實現某些演算法,代這樣的數值進去好像就沒辦法算出來
            微控网感谢您的参与
            Powered by LeadBBS 9.2 .
            Page created in 0.0938 seconds with 6 queries.