【问题标题】:How to write a floating point constant如何写一个浮点常量
【发布时间】:2012-08-07 06:41:51
【问题描述】:

我不知道,也无法快速找到在 C++ 中输入浮点常量的正确方法。

如果我想要 2^-52,我应该写什么?而且,

const double pres = 1>>52

【问题讨论】:

  • 使用联合来移动浮点数的“尾数”部分是未定义的行为。
  • 在这里回答(重复?)stackoverflow.com/questions/11806581/…
  • 不——这不是骗人的——对于像这样的常量,有比联合和摆弄更好的解决方案。

标签: c++ floating-point


【解决方案1】:

看起来你真的想要double 表示的精度。在这种情况下,不要使用魔法常数。相反,您可以使用它:

const double pres = std::numeric_limits<double>::epsilon();

【讨论】:

  • 太好了,这正是我需要的常量。
【解决方案2】:

您可以为此使用hex float 表示:

const double pres = 0x1p-52;

【讨论】:

  • 十六进制浮点数在 C 中,但由于某种原因不在 C++ 中。
  • 哦 - 这很烦人 - 我从来没有真正注意到 - 大概 g++ 和其他编译器在 C++ 中支持这个作为扩展?
  • 是的,我相信 g++ 支持,但 MSVC 不支持。
  • 这是迄今为止 C++11 中最令人讨厌的一个遗漏。
【解决方案3】:
#include<math.h>
double pres = 1/pow(2,52);

【讨论】:

  • gcc 是否静态计算?
  • @Enjolras 很有可能,确实如此。但这并不能保证。
猜你喜欢
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多