C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++の浮動小数点数の精度はどれくらい?setprecisionで表示桁数を制御する方法

C++において、浮動小数点数はfloat型で4バイト、double型で8バイトというサイズを持ちます。そのため、変数に格納できる小数の桁数には限りがあります。

例えば、1/3 = 0.333333… のように理論上は無限に続く数値を浮動小数点型の変数に入れると、有限の有効桁数だけが保存されます。C++の標準設定では、表示される有効数字は6桁です。つまり、何も指定しない状態では、浮動小数点数は最大6桁までしか出力されません。

setprecisionで精度を変更する

表示する精度を変更したい場合は、<iomanip>ヘッダーに含まれるstd::setprecisionを使用します。まずは基本となるサンプルコードを見てみましょう。

サンプルコード(デフォルトの挙動)

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    double x = 2.3654789;

    cout << "有効数字3桁で表示: " << setprecision(3) << x << endl;
    cout << "有効数字2桁で表示: " << setprecision(2) << x << endl;
    cout << "有効数字7桁で表示: " << setprecision(7) << x << endl;

    return 0;
}

実行結果

有効数字3桁で表示: 2.37
有効数字2桁で表示: 2.4
有効数字7桁で表示: 2.365479

このように、setprecision(n)はデフォルトでは「全体でn桁の有効数字」を意味します。小数点以下の桁数そのものを指定しているわけではない点に注意してください。

小数点以下の桁数を正確に指定したい場合

「小数点以下n桁」という形で厳密に制御したいときは、std::fixedを組み合わせます。fixedを指定すると、setprecisionの意味が「小数点以下の桁数」に変わります。

サンプルコード(fixedとの組み合わせ)

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    double x = 2.3654789;

    cout << fixed;
    cout << "小数点以下3桁まで表示: " << setprecision(3) << x << endl;
    cout << "小数点以下2桁まで表示: " << setprecision(2) << x << endl;
    cout << "小数点以下7桁まで表示: " << setprecision(7) << x << endl;

    return 0;
}

実行結果

小数点以下3桁まで表示: 2.365
小数点以下2桁まで表示: 2.37
小数点以下7桁まで表示: 2.3654789

補足:実際に保持できる精度の目安

IEEE 754規格に基づく一般的な環境では、float型は約7桁、double型は約15〜16桁の有効数字を正確に保持できます。表示を制御するsetprecisionと、内部で保持できる精度の限界は別物であるため、金額計算など高精度が求められる場面ではdouble型の利用や、必要に応じて多倍長精度ライブラリの検討をおすすめします。

  1. Windowsで使えるC++開発向けおすすめIDE 7選

    ```html 大規模なプロジェクトをプレーンなテキストエディターだけで管理するのは困難です。こうしたケースではIDE(統合開発環境)を使った方が、生産性が向上しストレスも大幅に軽減されます。IDEにはさまざまな種類があり、自分のニーズに合ったものを選ぶことが重要です。ここでは、Windowsで利用できる優れたC/C++向けIDEをご紹介します。 1. Visual Studio Microsoftが開発した定番IDEです。Windows上でのC++プログラムの構築・開発・プロファイリングにおいて、最高クラスのツール群を備えています。豊富なプラグインストアも魅力で、Azure、PowerShe

  2. C++のconstキーワードとは?定数宣言の基本とメリットを解説

    C++におけるconstは、変数を「定数」として宣言するための型修飾子です。const付きで宣言された変数は、一度初期化するとその値を後から変更することができません。 constを使うメリット constを使用する最大の利点は、プログラム内で値が意図せず書き換えられるのを防げることです。例えば、円周率(PI)のような不変の値を扱う場合、プログラムのどの部分からもその値が変更されないようにしたいはずです。このような値はconstとして宣言しておくことで、誤った代入から守ることができます。 コンパイラの最適化との関係 const修飾された型を持つオブジェクトは、コンパイラによって読み取り専用メ