2024-10-27 17:05:53 [显示全部楼层]
120浏览
查看: 120|回复: 0

手搓高精度加法(python)

[复制链接]
各位一定遇到个这样的情况:0.1+0.2=0.30000000000000001
想要解决只有2个办法:
1、大力出奇迹:缩减精度
2、高精度加法
今天我就来教大家手搓高精加:
  1. def super_add_sub(a,b,t):
  2.     ca = a
  3.     cb = b
  4.     l1 = []
  5.     l2 = []
  6.     ans = []
  7.     # 将数字a的每一位拆分存入列表l1中
  8.     while ca != 0:
  9.         l1.append(ca%10)
  10.         ca = ca//10
  11.     # 将数字b的每一位拆分存入列表l2中
  12.     while cb != 0:
  13.         l2.append(cb%10)
  14.         cb = cb//10
  15.     j = 0  # 初始化进位为0
  16.     # 如果l1的长度小于l2的长度,则在l1末尾补0,使得l1和l2长度相等
  17.     while len(l1) < len(l2):
  18.         l1.append(0)
  19.     # 如果l2的长度小于l1的长度,则在l2末尾补0,使得l1和l2长度相等
  20.     while len(l2) < len(l1):
  21.         l2.append(0)
  22.     # 逐位相加,并处理进位
  23.     for i in range(len(l1)):
  24.        ans.append((l1[i]+l2[i]+j)%10)
  25.        j = (l1[i]+l2[i]+j)//10
  26.     if t == 0:
  27.         # 处理最高位的进位
  28.         ans.append(j)
  29.     # 将结果列表反转,因为我们是从低位到高位计算的
  30.     ans.reverse()
  31.     # 将结果列表中的每个元素转换为字符串
  32.     ans = [str(i) for i in ans]
  33.     # 将结果列表中的字符串元素拼接成一个字符串,并转换为整数返回
  34.     return [int("".join(ans)),j]
复制代码
这是子函数(t代表是否为小数1代表是,0代表否)
  1. def super_add(a,b):
复制代码
这是主函数

整体思路是模拟人类竖式计算。
听懂掌声!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail