小编Ano*_*mus的帖子

两次溢出?

我一直想知道万一double达到最大值,会发生什么,所以我决定编写以下代码:

#include <stdint.h>
#include <iostream>
#define UINT64_SIZE 18446744073709551615
int main() {
    std::uint64_t i = UINT64_SIZE;
    double d1 = ((double)(i+1)) / UINT64_SIZE; 
    double d2 = (((double)(i)) / UINT64_SIZE)*16;
    double d3 = ((double)(i * 16)) / UINT64_SIZE;

    std::cout << d1 << " " << d2 << " " << d3; 
}
Run Code Online (Sandbox Code Playgroud)

我期待这样的事情:

0 16 0 
Run Code Online (Sandbox Code Playgroud)

但这是我的输出:

0 16 1 
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?为什么值d3d1不同?

编辑:

我决定将代码更改为此,以查看结果:

#include <stdint.h>
#include <iostream>
#define UINT64_SIZE 18446744073709551615
int main() {
    std::uint64_t i = UINT64_SIZE; …
Run Code Online (Sandbox Code Playgroud)

c++ overflow

5
推荐指数
1
解决办法
6311
查看次数

标签 统计

c++ ×1

overflow ×1