2014-01-18 73 views
0

我有一个文件规格(这里是:http://www.septentrio.com/secure/asterx1v_2_1/SBF%20Reference%20Guide.pdf),它具有标记为32位和64位浮点数的字段(请参见第8页)。我怎样才能在我的程序中使用两个宽度?我现在正在Mac OSX上开发,但我也将在Linux机器上部署。如何在C++中使用32位和64位浮点型

更多细节:

我知道我可以告诉编译器的宽度,但我怎么能区分两种不同的浮动宽度?也许有人也有建议改变我解析的方式,即reinterpret_cast(buffer + offset)然后使用这些值。这些文件大小很大(4GB),所以我需要性能。

+0

我们在谈论哪个操作系统? –

+2

平台上的浮点数可能是32位,双精度浮点数是64位 - 这很常见。 – nos

+0

是的,但是,浮动和双打具有不同的内部结构是否正确? – Brian

回答

1

这似乎是显而易见的,不过:

在Intel平台和许多其他float是32位浮点值,double是64位浮点值。尝试这种方法。它最有可能会工作。

要在编译时在程序开始你的类型的绝对确保检查的sizeof或静态如果你的编译器允许这样做。

再次,首先尝试简单的解决方案。

float和double算术英特尔得到实施,这是快。在任何情况下,本机算术是您从CPU中获得的最快速度。

IEEE 754(http://en.wikipedia.org/wiki/IEEE_floating_point)定义的不是一种浮点格式,而是几种,如4,8,16字节等等。它们都有不同的范围和精度,但它们都是IEEE值。

+0

您能否澄清float和double是否都存储在规范中给出的相同IEEE格式(第8页)? – Brian

+0

我没有MAC体验,但知道我们的日子是基于Intel的。这意味着你只需在你的结构中定义float和double字段,它就可以工作。你只需要确保适当的字段对齐。 –

+0

谢谢,你的编辑帮我解决了! – Brian