浮点输出出现意外结果

问题描述 投票:0回答:1
 using namespace std;
 #define mod 1e9+7
 int main(){
     cout<<mod;
     cout<<endl<<fixed<<mod;
 }

输出:

1e+009
1000000007.000000

我认为在这种情况下,mod 是一个浮点数,因此第一个给出 1e+009 作为输出,这可能是由于浮点精度所致。但是使用fixed后,为什么输出不是1000000000.000000。

(通过#include 包含所有必需的头文件

c++ c++17
1个回答
4
投票
1e9 + 7

这个数字可以在

double
中精确表示,这里没有精度损失。

但是,当您使用

std::cout << mod
打印它时,它会使用默认精度打印,即6位十进制数字。因此,不打印 7。

您可以使用

std::cout
操纵器调整
std::setprecision
的精度:

#include <iostream>
#include <iomanip>

int main() {
    std::cout << std::setprecision(10) << mod << '\n';
}

将打印

1000000007

© www.soinside.com 2019 - 2024. All rights reserved.