0

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

我的其他问题是

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

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

4

2 回答 2

3

来自浮点指南

为什么需要浮点数

由于计算机内存有限,无论使用二进制分数还是十进制分数,您都无法以无限精度存储数字:在某些时候您必须切断。但是需要多少准确度?它在哪里需要?有多少个整数位和多少个小数位?

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

为了满足工程师和芯片设计者的要求,数字格式必须为不同数量级的数字提供准确性。但是,只需要相对精度。为了让物理学家满意,必须能够进行涉及不同数量级的数字的计算。

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

至于你的其他问题:

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

话虽如此,浮点与定点的问题经常与二进制与十进制相混淆 - 具体而言,人们经常将二进制浮点格式与(隐式)十进制定点格式进行比较。不能准确地表示小数是让大多数人感到惊讶的事情,因此他们认为这是“浮点格式”的一个很大的缺点,而实际上它是二进制格式的一个缺点,而且他们一点也不惊讶于不能准确地表示像 1/3 这样的数字。

于 2011-05-23T11:42:59.400 回答
0

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

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

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

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

  • 您的应用程序的性质是什么?它是否可以自然地使用四位小数。如果在最低有效位等处出现舍入错误会发生什么。

于 2011-05-23T11:50:41.433 回答