【发布时间】:2020-06-30 15:58:23
【问题描述】:
我知道在没有Floating Point Units 的机器上,这些数字应该以定点表示,或者使用libc 模拟FPU。
在前一种情况下,非常大和非常小的 FPU 值如何在定点上表示? 我的理解是,定点的十进制分辨率数量有限,这里解释: Is fixed point math faster than floating point?
因此,如果我尝试在C 中编译一个非常小/大的 FP 值,对于没有 FPU 的机器,如何
那个数字在定点被压制?
【问题讨论】:
-
浮点数在 C 中始终是浮点数。它不是定点数。
-
如果机器没有FPU,浮点计算在软件中完成。
-
如何选择以定点表示数字取决于程序员,并且因应用程序而异。例如,金钱通常表示为整数十分之一美分。天文数据库可能会使用整数 gigameters 或其他东西。这完全取决于应用程序。
-
64 位定点数的十进制分辨率为 1/(2^32),浮点数的十进制分辨率最高为 1/(2^53) 那么如何表示固定品脱的 FP 值大到什么时候都看不出来?
-
使用整数数组。这就是 bignum 库的工作方式。因此,如果您使用一个由八个 32 位整数组成的数组,您可以有一个 256 位的数字,并且可以将一个 64 位的变量用于部分乘积等。就像您可以在纸上写一个十进制数一样,如只要纸张大小允许,并对其进行“普通”算术运算。
标签: c floating-point fixed-point