1. ホーム
  2. c++

[解決済み] setprecision() が期待通りに動作しない

2022-02-07 03:08:14

質問

2つの数値(floatデータ型)を受け取り、その数値を何桁まで割りたいかをユーザーに尋ね、最後にその数値まで割り、'cout<<'するプログラムをしていました。コンパイルはできたのですが、22/7という無理数の計算を100桁までしたときに、30桁か40桁までしか計算できず、残りはゼロで埋め尽くされてしまいました。このような感じです。 3.1428570747375488281250000000000000000000000000000000000000000000000000000000000000000000000000000000

以下は私のコードです。

#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;
int main()
{
    system("clear");
    float y;
    int z;
    float x;
    float a;
    cout << "\nHello User\n";
    cout << "\nEnter first num to be divided: ";
    cin >> x;
    cout << "\nCool!! Now enter the 2nd number: \n";
    cin >> y;
    cout << "\Exelent!! Enter the place upto which u wanna caculate: ";
    cin >> z;
    a = x / y;
    cout << fixed << showpoint;
    cout << setprecision(z);
    cout << "Calculating......\n" << a << endl;
    return 0;
}

解決方法は?

浮動小数点型には一定の精度があります。浮動小数点(または倍精度)を操作しても、正確な結果は得られません。より良い精度を得るには double の代わりに float (参照 この記事 をご覧ください)。

あなたは #include <limits> というように、入力から精度を取得するステップを削除し、コードを変更します。

std::cout << std::setprecision(std::numeric_limits<float>::max_digits10);

を使用すると、使用する型に対して最大限の精度で結果を表示することができます。