C++ 有什么方法可以在不将其更改为 long long 的情况下以完全精度打印最大双精度(8 字节)值?

C++ Any way to print maximum double (8 bytes) value with full precision without changing it to long long?

我在使用 'cout' 打印值时遇到问题。我想在控制台中看到值“9223372036854775807”,但我只是继续获得“9223372036854775800”,负值也会发生同样的情况。我还希望用户将其作为最大值输入并保留小数位。

---------------- 这些将是最小值和最大值

double al = scnd_num_min(num1, Oprt);
al = al * (-1);
double ah = scnd_num_max(num1, Oprt);

------------- 这是我打印这些值的地方

cout << "Please enter a value within a range of: " << "\n" << fixed << al;
cout << " and " << ah << " : ";

这是获取值的一个函数:

    double scnd_num_max(double num1, char Oprt)
    {
    double max1 = 9223372036854775807;
    double max2 = 9223372036854775806;
    double min1 = -9223372036854775806;
    switch(Oprt)
    {
    case '+':
        if (num1 <= 0)
            return max1;
        else
            return (max1 - num1);
    case '-':
        if (num1 >= -1)
            return max1;
        else
            return ((max1 - (num1 * (-1)))+1);
    case '*':
        if ((num1 < min1) || (num1 > max2))
            return 1;
        else if (num1 == 0)
            return max2;
        else if (num1 > 0)
            return (max2 / num1);
        else
            return (max2 / (num1 * (-1)));
    case '/':
        return max2;
    }
}

负值也差不多。

double 是 64 位宽,但它不能容纳 long long(也是 64 位)可以容纳的所有值,因为浮点数由符号位、指数和尾数组成。 double 的尾数是 52 位宽,所以你可以确定每个 52 位(实际上是 53,因为符号位)宽的整数可以存储在 double 中而不会丢失精度,其余的你可能会丢失精度。

编辑:顺便说一下,double max 是 1.79769e+308,见 this link