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
我在使用 '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