确保 C 双精度为 64 位

新手上路,请多包涵

在我的 C++ 程序中,我需要从外部字节序列中提取一个 64 位浮点数。有什么方法可以确保在编译时双精度为 64 位?我应该使用其他类型来存储数据吗?

编辑:如果您正在阅读本文并 实际上 正在寻找一种方法来确保以 IEEE 754 格式存储,请查看下面的 Adam Rosenfield 的答案。

原文由 Whatsit 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 586
2 个回答

对其他答案的改进(假设 char 是 8 位,标准不保证这一点..)。会是这样的:

 char a[sizeof(double) * CHAR_BIT == 64];

或者

BOOST_STATIC_ASSERT(sizeof(double) * CHAR_BIT == 64);

您可以在 <limits.h><climits> 中找到定义的 CHAR_BIT。

原文由 Evan Teran 发布,翻译遵循 CC BY-SA 2.5 许可协议

在 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题