【问题标题】:Decltype(0.5) x = 5; makes x *Double* rather than *Float*. Why? [duplicate]decltype(0.5) x = 5;使 x *Double* 而不是 *Float*。为什么? [复制]
【发布时间】:2020-09-20 04:20:01
【问题描述】:

无论浮点数如何,总是使用双精度不是浪费空间吗? AFAIK float 使用 4B 或 32 位,而 double 占用 8B 或 64 位。为什么编译器无法判断浮点数是否足够?

【问题讨论】:

  • 0.5 是双精度,0.5f 是浮点数。
  • 查看en.cppreference.com/w/cpp/language/floating_literal,特别是与浮点文字上的可选后缀有关的部分。
  • “为什么编译器不能判断浮点数是否足够?” -- 这个问题无关紧要,因为语言设计者决定不给编译器一个机会。
  • 如果您知道以后可能分配给x的所有值的范围,那只是浪费空间。
  • 我可能应该在我之前的评论中提出更改。与其询问编译器的能力,不如询问“为什么编译器允许确定float是否足够?”更相关。幸运的是,接受的答案解决了这个修改后的问题。

标签: c++ types casting bit


【解决方案1】:

C++中0.5的类型是double。如果你想要一个浮点数,你需要说 0.5f 。这是 C 和 C++ 定义的一部分。

在您的问题中暗示着希望根据值中的位数自动选择类型,例如我们可以使用浮点数为 0.5,但双倍数为 0.123456789。然而,这不是一个站得住脚的方法,首先因为它对于 1980 年代编写的编译器来说过于复杂,其次因为它使得推理代码变得更加困难,例如0.123 / 0.987 的类型是什么?

【讨论】:

  • 哦,有道理。我什至没有想到这一点。很惭愧我问了这个问题。谢谢!
猜你喜欢
  • 2013-07-10
  • 2014-11-15
  • 2021-03-30
  • 1970-01-01
  • 2019-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多