为什么
C++
需要高精度计算?这个问题对于
C++
来说,是一个比较尴尬的问题。因为 Java
和
Python
是不需要高精度计算的, 因为这两个语言直接支持高精度数据。
•
从
C++
的角度回答这个问题,我们首先要从
C++
的基础知识来 看,也就是 C++
的数据类型可以表示的范围。下表是
C++
常用 的数据类型的字节大小和数值范围。我们针对 G++
来说明这个问 题,因为在不同类型的编译器里,相同数据类型的大小是不一样 的。
从上表,我们可以清楚
的看到,当进行整数计 算的时候, 数据超过 18,446,744,073,709,55 1,615,也就是超过 8Byte后,
C++
就没有 对应的数据类型就行表 达。这就是为什么 C++ 需要高精度计算。
常见名词
•
高 精
•
超 过 了
C + +
固 有 的 数 据 类 型 可 以 表 达 范 围的 数 。 比 如
1 8 , 4 4 6 , 7 4 4 , 0 7 3 , 7 0 9 , 5 5 1 , 6 1 6
这个数,已 经 超 过 了
u n s i g n e d l o n g l o n g
可 以 表 达 的 数 据范 围 , 也 就 是
8B y t e
。
•
低 精
•
直 接 可 以 使 用
C + +
中 固 有 的 数 据 类 型 进 行 定义 。 比 如
1 5 , 6 7 8 , 8 0 8 , 8 7 7
这 个 数 , 我们可以用
l o n g l o n g
来 定 义 。
•
高 精 加 高 精
•
高 精 度 数 加 上 高精 度 数 。
•
高 精 乘 高 精
•
高 精 度 数 乘 上 高精 度 数 。
•
高 精 乘 低 精
•
高 精 度 数 乘 上 低精 度 数 。
•
高 精 除 高 精
•
高 精 度 数 除 以 高精 度 数 。
•
高 精 除 低 精
•
高 精 度 数 除 以 低精 度 数 。
1
高精度数的定义
长整型(
long long
)
有符号数范围
-2 63次方~2 63次方 -1
无符号数范围
0~264
-1
1000
位整数
如何存储?
高精度数
或
大数
1
高精度数的存储
思想:高精度数每一位数字存储在一个数组中
1