gpt4 book ai didi

c++ - std::cout 不打印 float 作为异常(exception)

转载 作者:行者123 更新时间:2023-12-03 10:04:11 25 4
gpt4 key购买 nike

为什么std::cout << 1.00000001;打印 1到控制台?
它适用于 1.0001 , 只有在超过一定精度后才停止正常打印。
这些数字是硬编码的,所以这个问题不是重复的。在那个问题中,由于添加了两个浮点数而产生了一个无理数,这意味着这些数字无法正确存储,但在我的情况下,这些数字是硬编码的,那么无法打印(或可能存储)一个显式初始化为 1.00000001 的浮点数?.
难道只是cout无法打印值或者它真的是 int ?
考虑以下程序

int main()
{
float num = 1.0000001f;
float num2 = num * 2;
std::cout << num;
std::cout << num2;
}
num2版画 2但是编译器没有给出关于从 float 转换的警告至 intline 2 ,所以我认为 num必须是 float .这是否意味着它只是 cout 的问题? ?我可以安全地假设内部 num实际上是 1.0000001f即使它打印 1到控制台?
我的编译器是 Visual Studio 2019 的内置编译器。

最佳答案

总结一下我的评论:

  • 数字 1.0000001 不能用浮点数表示。
  • 编译器将选择一个浮点值。
  • 它可以随意舍入(向上、向下或最接近),这是实现定义的。

  • 所以如果你玩一下 this converter ,你可以看到在 1 之后,接下来的浮点值是:
  • 1
  • 1.00000011920928955078125
  • 1.0000002384185791015625
  • 1.00000035762786865234375
  • 1.000000476837158203125
  • ...

  • 1.0000001 介于前两者之间,因此您的编译器可以选择其中之一。在您的情况下,您的编译器似乎选择了 1。
    (同样对于打印操作,cout 操作将在定义的精度后截断数字,因此它不会显示我上面放置的完整数字 - 精度默认为 6 位)。

    关于c++ - std::cout 不打印 float 作为异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65452671/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com