c123c456c 2014-04-01 15:10 采纳率: 0%
浏览 1469

关于python计算时精度问题

35.27-15
20.270000000000003
请问这是什么原因造成的,同时有什么优化的解决方案

  • 写回答

1条回答 默认 最新

  • lanbda_20080810 2023-02-01 22:26
    关注

    在python基础里都讲过,浮点数计算存在误差,你可以试试补零。就是把小数点移动到最后面。

    35.27变成3527
    15变成1500
    然后用3527-1500得2027
    2027再挪小数点变成20.27可以避免误差。

    #免误差浮点数相减
    
    def subtraction(a,b):
        a = str(a).split(".")
        #print(a)
        b = str(b).split(".")
        #print(b)
        print(a,b,"1")
        if(len(a[1])>len(b[1])):
            print(a,"a")
            i = len(a[1])
            r_a = 0
            r_b = i-len(b[1])
        else:
            print(b,"b")
            i = len(b[1])
            r_a = i-len(a[1])
            r_b = 0
        a = "".join(a)
        b = "".join(b)
        print(a,b,"2")
        a_l = []
        b_l = []
        for d in range(len(a)):
            a_l.append(a[d])
        for d in range(len(b)):
            b_l.append(b[d])
        a = a_l
        b = b_l
        print(a,b,"3")
        for __count in range(r_a):
            a.append('0')
        for __count in range(r_b):
            b.append('0')
        print(a,b,"4")
        a = "".join(a)
        b = "".join(b)
        print(a,b,"5")
        c = str(int(a)-int(b))
        print(c,"c")
        __done = []
        for __count in range(len(a)-len(c)):
            __done.append(0)
        for d in range(len(c)):
            __done.append(c[d])
        print(__done,"__done 1")
        i = len(__done)-i
        __done.insert(i,".")
        print(__done,"__done 2")
        c = float("".join('%s' %d for d in __done))
        print(c,"c")
        return(c)
    
    
    print(subtraction(1.001,1.0001))
    

    该程序仓促写成,还有漏洞,就是a如果小于b就会报错闪退,如果需要修复版加我微信:bd20080810 名字:BLEEM
    记得采纳哦。

    img

    评论

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码