'cout'で値を印刷する際に問題があります。私はコンソールで値 "9223372036854775807"を見たいと思っていますが、私はただ "9223372036854775800"を取得し続け、負の値でも同じことが起こります。私はまた、最大値としてこれを入力し、小数点以下の桁数を保持したいと思っています。C++ long doubleに変更することなく、最大倍精度(8バイト)の値を完全精度で出力する方法はありますか?
---------------これらは、最小値と最大値
double al = scnd_num_min(num1, Oprt);
al = al * (-1);
double ah = scnd_num_max(num1, Oprt);
--------------これになります
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;
}
}
プリティ同じ負の値のためである:私は、これらの値
cout << "Please enter a value within a range of: " << "\n" << fixed << al;
cout << " and " << ah << " : ";
を印刷し、それが値を取得するための一つの機能がどこにあるかです。
参考読書を参照してください:[すべてのコンピュータ科学者は、浮動小数点演算について知っておくべきこと](https://docs.oracle.com/ cd/E19957-01/806-3568/ncg_goldberg.html)TL; DRバージョン:精度を失う前に、浮動小数点変数にあまりにもフィットすることができます。「double」の場合、これは約15桁です。 9,223,372,036,854,775,807は19桁です。 – user4581301