手搓高精度加法(python)

2024-10-275050
AI 快速预览详细 收起
本文介绍了如何在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):
复制代码
这是主函数

整体思路是模拟人类竖式计算。
听懂掌声!

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -