从 IEEE 754-2008 十进制浮点数据转换为二进制浮点格式

Posted

技术标签:

【中文标题】从 IEEE 754-2008 十进制浮点数据转换为二进制浮点格式【英文标题】:Convert from IEEE 754-2008 decimal floating point data to binary floating point format 【发布时间】:2011-07-29 14:58:13 【问题描述】:

我在磁盘上有一个二进制数据以 IEEE 754-2008 格式存储,它是 32 位浮点数,以 10 为底(如果我没记错的话:http://en.wikipedia.org/wiki/Decimal_floating_point)。我如何将它转换为基数 2 浮点(如英特尔处理器上的标准 float32)? C、Python 或 Java 中的示例代码会很棒!感谢您的帮助!

【问题讨论】:

有2种变体:二进制整数有效位域,密集十进制有效位域。用的是哪一个? 【参考方案1】:

如果您使用的是 GCC,则可以访问专用的十进制浮点例程:http://gcc.gnu.org/onlinedocs/gccint/Decimal-float-library-routines.html

您应该将二进制数据反序列化为十进制浮点类型之一,然后将转换函数应用于标准浮点类型。

【讨论】:

感谢您的回复。不幸的是,我收到一个错误:错误:当我尝试定义 _Decimal32 变量时,此目标不支持十进制浮点。我猜英特尔平台不支持它??? 可以,但是你的编译器可能不支持。当您从源代码构建 GCC 时,您可以选择启用或禁用十进制浮点支持;我建议重新编译 GCC 以确保拥有它。 (这很简单,不用担心。) 谢谢。我应该试试。达尔文也支持吗? 您绝对可以在 Darwin 上构建 GCC,但支持的十进制浮点类型可能不同。 (显然有两种常见的类型。)无论如何,如果您只需要 读取 一些二进制数据,那么手动解析可能会更快。 GCC 的重点在于它实际上可以执行小数运算,但如果你不需要它,那可能就有点过头了。

以上是关于从 IEEE 754-2008 十进制浮点数据转换为二进制浮点格式的主要内容,如果未能解决你的问题,请参考以下文章

从二进制转换为 IEEE 浮点

IEEE 754标准

如何将大数(例如 1.23e29)转换为 IEEE 754 单精度浮点格式?

将十进制数表示成ieee754标准的32浮点规格化数 27/64

IEEE-754浮点标准简介

从 IBM 浮点转换为 IEEE 浮点标准和副 Versa- 在 C# 中?