我知道有三种方法可以用二进制表示数字:
- 整数
- 固定点小数(基本上只是整数除以常量(
- 浮点小数(基本上只是整数除以/乘以 2 的可变幂(
但是这些都不能完全精确地表示像 0.1 和 1/3 这样的数字,并且没有舍入误差。
我想表示内存中的任何有理数 - 存在哪些不同的表示形式?它们(缺点(是什么(与上述相比(?我如何使用它们进行计算(+-*/(?它们的范围、分辨率以及如何处理边缘情况(极小/大/精确数字(?
一些例子:
- 1/3
- 0,1
- 0.000001234
- 10^100
- 10^100+0.1
- 2/4
有理数 定义为可以表示为两个整数之比的数字。因此,必须存储两个足够长度的整数,以保证任何有理数的完美精度。
通常,浮点数用于存储有理数,浮点数仅在显示时转换为分数。
无理数的存储,例如素数的精确根(而不是近似浮点数(,涉及解释字符串或计算机代数系统。