c++ - 谁能告诉我为什么 float 不能容纳 3153600000?

标签 c++ c overflow

我知道这很愚蠢,但我在编程世界中是一个安静的菜鸟,这是我的代码。

这个很完美:

#include <stdio.h>

int main() {

    float x = 3153600000 ;

    printf("%f", x);

    return 0;
}

但是这个有一个问题:

#include <stdio.h>

int main() {

    float x = 60 * 60 * 24 * 365 * 100 ;

    printf("%f", x);

    return 0;
} 

所以 60 * 60 * 24 * 365 * 100 是 3153600000 对吗???如果是那么为什么会产生不同的结果???结果,我在第二个打印出“-1141367296.000000”的溢出。谁能告诉我为什么?

最佳答案

您将整数相乘,然后将结果放入 float 中。到那时,它已经溢出了。

试试 float x = 60.0f * 60.0f * 24.0f * 365.0f * 100.0f;。您应该会得到想要的结果。

关于c++ - 谁能告诉我为什么 float 不能容纳 3153600000?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5811659/

相关文章:

c++ - 用一个简单的例子理解 C++ 中的 LAPACK 调用

c - 二传手中的自由字符串

c - 如何检查数组中的特定值

linux - Windows 与 Linux 缓冲区溢出

DIV 以外的元素的 CSS "overflow"属性

c++ - 有没有一种方法可以在不创建该类实例的情况下获取 QObject 派生类的类名?

c++ - 实现定义的缩小转换?

c++ - for 循环的多操作更改部分中 (void) 的用途

c - MPI_Barrier 和 MPI_Gather 使用小数据集还是大数据集?

html - 溢出时停止 DIV :hidden from scrolling when textbox is clipped