在我的 C++ 程序中,我需要从外部字节序列中提取一个 64 位浮点数。有什么方法可以确保在编译时双精度为 64 位?我应该使用其他类型来存储数据吗?
编辑:如果您正在阅读本文并 实际上 正在寻找一种方法来确保以 IEEE 754 格式存储,请查看下面的 Adam Rosenfield 的答案。
原文由 Whatsit 发布,翻译遵循 CC BY-SA 4.0 许可协议
在我的 C++ 程序中,我需要从外部字节序列中提取一个 64 位浮点数。有什么方法可以确保在编译时双精度为 64 位?我应该使用其他类型来存储数据吗?
编辑:如果您正在阅读本文并 实际上 正在寻找一种方法来确保以 IEEE 754 格式存储,请查看下面的 Adam Rosenfield 的答案。
原文由 Whatsit 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 C99 中,您只需检查预处理器符号 __STDC_IEC_559__
是否已定义。如果是,那么您可以保证 double
将是一个用 IEEE 754(也称为 IEC 60559)格式表示的 8 字节值。请参阅 C99 标准,附件 F。不过,我不确定此符号在 C++ 中是否可用。
#ifndef __STDC_IEC_559__
#error "Requires IEEE 754 floating point!"
#endif
或者,您可以检查预定义常量 __DBL_DIG__
(应该是 15), __DBL_MANT_DIG__
(应该是 53), __DBL_MAX_10_EXP__
),应该是 __DBL_MAX_EXP__
0dc2a9b83cc8e335ed4218fa4308), ---
(应为 1024)、 __DBL_MIN_10_EXP__
(应为-307)和 __DBL_MIN_EXP__
(应为-10)。这些应该适用于所有类型的 C 和 C++。
原文由 Adam Rosenfield 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
对其他答案的改进(假设 char 是 8 位,标准不保证这一点..)。会是这样的:
或者
您可以在
<limits.h>
或<climits>
中找到定义的 CHAR_BIT。