我有兴趣了解用于单个或由C对基于Intel的系统中使用++双型的二进制格式。

我已经避免了使用浮点数的情况下,其中需要的数据可能被读出或由另一系统(即文件或网络)写入。我不知道,我可以用定点数来代替,并且固定点更加准确,但我有兴趣了解浮点格式。

有帮助吗?

解决方案

浮点格式由处理器,而不是语言或编译器来确定。这些天来,几乎所有处理器(包括所有的英特尔台式机),要么没有浮点单元或有一个符合IEEE 754符合你得到两种或三种不同尺寸(英特尔与SSE提供了32,64,和80位)和各一个有符号位,指数和尾数。所表示的数量通常由如下公式给出:

sign * (2**(E-k)) * (1 + S / (2**k'))

其中k”是比特的有效数的数量,而k是围绕指数的中间范围的常数。有特别的表示,零(正负零)以及无穷大和其他“不是一个数字”(NaN)值。

有明确的怪异;例如,分数1/10不能被精确作为二进制IEEE标准浮点数来表示。由于这个原因,IEEE标准还提供了一个十进制表示,但是这主要是由手持计算器,而不是由通用计算机使用。

推荐阅读:大卫Golberg的什么每台计算机科学家应该知道关于浮点算术

其他提示

维基百科有一个合理的总结 - 见 http://en.wikipedia.org/wiki/IEEE_754

伯特如果你想悫应避免在二进制格式做系统传输的数字。要么使用中间件如CORBA(只开玩笑,人),Tibco的等,或者求助于旧喜爱,文本表示。

由于其他海报指出,有大量的关于由每一个现代的处理器使用的IEEE格式的信息,但是这不是你的地方都会出现问题。

您可以依靠使用IEEE格式的现代系统上,但你需要看的字节顺序。查一查维基百科(或其他地方)“字节顺序”。英特尔系统是little-endian的,很多RISC处理器是大端。两者之间的交换是微不足道的,但你需要知道你是什么类型的。

传统上,人们使用大端格式进行传输。有时人们包括报头指示它们正在使用的字节顺序。

如果你想绝对便携,最简单的就是用文本表示。然而,可以得到浮点数,如果你想捕捉的全精度相当冗长。 0.1234567890123456e + 123。

英特尔的表示是符合IEEE 754。 您可以在 HTTP详情://下载。 intel.com/technology/itj/q41999/pdf/ia64fpbf.pdf

请注意十进制浮点常数可以转换成在不同的系统不同的浮点二进制值(即使是使用不同的编译器在同一系统上)。的差将是轻微 - 仅大到2 ^ -54用于双也许 - 但是有区别的仍然

如果你想保证在任何平台上的相同的浮点二进制值使用十六进制常量。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top