定点数与浮点数



定点数和浮点数的计算机体系结构有哪些优点/缺点?我可以理解两者都会导致各种不准确。

我的其他问题是

  1. 这些不准确之处是如何产生的?

  2. 一种形式比另一种更好吗?

摘自 The Floating-Point Guide:

为什么需要浮点数

由于计算机内存有限,因此 不能存储无限的数字 精度,无论您是否使用 二进制分数或十进制:在 有些点你必须切断。但 需要多少精度?以及在哪里 需要吗?多少个整数位 有多少位小数位?

  • 给工程师建造 高速公路,是否无关紧要 它有 10 米或 10.0001 米宽——他的测量可能一开始就不是那么准确。
  • 对于设计微芯片的人来说, 0.0001 米(十分之一毫米)是一个巨大的差异 - 但是 他永远不必处理 距离大于 0.1 米。
  • 物理学家需要使用 光(约300000000)和牛顿的 引力常数(大约 0.0000000000667)一起在同一计算中。

满足工程师和芯片 设计师,一个数字格式必须 提供非常数字的准确性 不同的量级。但是,只有 需要相对精度。自 满足物理学家,一定是 可以进行计算 涉及具有不同数字的数字 程度。

基本上,具有固定数量的 整数和小数不是 有用 - 解决方案是一种格式 带有浮点数。

至于你的其他问题:

    所有
  1. 不准确性的出现只有一个原因:您试图将无限量的数据(例如所有有理数)放入有限的空间(例如 64 位)。格式之间唯一不同的是可以准确表示的数字是如何分布的。
  2. 浮点格式更好,句点。它们缺乏定点共振峰的许多限制,尽管它们仍然有许多限制(几乎所有定点格式也有
  3. )。

话虽如此,浮点与定点的问题经常与二进制与十进制混淆 - 具体来说,人们经常将二进制浮点格式与(隐式)十进制不动点格式进行比较。无法准确表示小数是让大多数人感到惊讶的事情,因此他们认为这是"浮点格式"的一大缺点,而实际上这是二进制格式的缺点,他们对无法准确表示 1/3 这样的数字一点也不感到惊讶。

您尚未指定所使用的编程语言,但是,大多数编程语言没有内置的定点类型。

C 和 C++ 等主流语言具有整数类型和浮点类型。如果您打算使用诸如定点类型之类的东西,例如四个小数点,则必须在现有整数类型之上实现它。或者,使用现有库。

当谈到哪个更好的问题时,答案是"视情况而定"。您必须考虑的事项是:

  • 您打算使用哪种硬件?大多数现代主机(PC:s)都有专用的浮点硬件,高端嵌入式系统也是如此。但是,当使用低端嵌入式系统时,它不会,因此它必须根据现有的汇编指令实现浮点运算。

  • 您的应用程序的性质是什么?它是否自然地适用于,比如说,四个小数点。如果您在最低有效位等上出现舍入错误会发生什么。

最新更新