C++のsqrt・sqrtf・sqrtl関数の使い方と違いを徹底解説
C++のcmathライブラリには、平方根を求めるための関数が複数用意されています。sqrt()だけでなく、データ型に応じて使い分けられるsqrtf()やsqrtl()などがあり、それぞれ対応する引数の型と戻り値の型が異なります。
本記事では、これら3つの平方根関数の特徴と具体的な使い方を、サンプルコード付きで詳しく解説します。
sqrt()関数:double型用の平方根計算
sqrt()関数は、double型のデータに対して使用する基本的な平方根関数です。引数としてdouble型の値を受け取り、その平方根をdouble型で返します。
構文
double sqrt(double argument)
使用例
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
main() {
double x = 144.0;
double y = 180.0;
cout << fixed << setprecision(12) << sqrt(x) << endl;
cout << fixed << setprecision(12) << sqrt(y) << endl;
}実行結果
12.000000000000 13.416407864999
注意点: 引数は必ず指定する必要があります。引数を省略するとコンパイルエラーになります。また、負の値を渡した場合は戻り値としてNaN(Not a Number)が返される点にも注意しましょう。
sqrtf()関数:float型用の平方根計算
sqrtf()関数は、float型(単精度浮動小数点数)のデータに対して使用します。float型の引数を受け取り、float型の平方根を返します。
構文
float sqrtf(float argument)
使用例
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
main() {
float x = 144.0;
float y = 180.0;
cout << fixed << setprecision(6) << sqrtf(x) << endl;
cout << fixed << setprecision(6) << sqrtf(y) << endl;
}実行結果
12.000000 13.416408
sqrt()と同様に、引数の指定は必須であり、負の値を渡すとNaNが返されます。メモリ使用量を抑えたい場合や、精度がそれほど求められない場面では、float型を扱うこの関数が適しています。
sqrtl()関数:long double型用の高精度平方根計算
sqrtl()関数は、long double型(拡張精度浮動小数点数)のデータに対して使用します。long doubleは通常のdoubleよりも高い精度を持つ型であり、非常に大きな数値を扱う際に威力を発揮します。
特に10の18乗オーダーのような巨大な整数値の平方根を正確に計算したい場合には、この関数が役立ちます。
構文
long double sqrtl(long double argument)
使用例
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
main() {
long long int x = 5000000000000000000;
long long int y = 999999999999999999;
cout << fixed << setprecision(12) << sqrtl(x) << endl;
cout << fixed << setprecision(12) << sqrtl(y) << endl;
}実行結果
2236067977.499789696420 999999999.999999999476
巨大な数値に対しても、高い精度で平方根が計算できていることが確認できます。
まとめ:3つの関数の使い分け
| 関数名 | 引数の型 | 戻り値の型 | 主な用途 |
|---|---|---|---|
sqrt() | double | double | 一般的な平方根計算 |
sqrtf() | float | float | メモリ効率を重視する場合 |
sqrtl() | long double | long double | 高精度・巨大な数値の計算 |
C++では、扱うデータの精度要件に応じてこれらの関数を適切に使い分けることで、パフォーマンスと精度のバランスを取ったプログラムを書くことができます。
-
C++で直方体の体積と表面積を計算するプログラムの作成方法
直方体とは? 直方体とは、6つの長方形の面から構成される三次元の立体図形です。各面の縦と横の長さが異なるため、全体として異なる長さの辺を持っています。立方体と直方体の違いは、立方体では長さ・高さ・幅がすべて等しいのに対し、直方体ではこれら3つが必ずしも同じではないという点です。 直方体の主な性質は以下のとおりです。 6つの面 12本の辺 8つの頂点 以下は直方体のイメージ図です。 問題の概要 直方体の長さ(L)、幅(W)、高さ(H)が与えられたとき、その総表面積と体積を求めるのが課題です。表面積とは各面が占める空間の広さのことであり、体積とはその形状が内包できる空間の大きさのことです。
-
C++でfloatとdoubleを比較する方法|許容誤差(EPSILON)を使った実装例
C++においてfloat型やdouble型などの浮動小数点数を比較する方法は、最終的に何を実現したいかによって異なります。浮動小数点数は内部で2進数の近似値として表現されるため、「==」演算子による単純な等価比較では意図しない結果になることがあります。そこで一般的には、許容できる誤差(イプシロン)を設定し、その範囲内であれば同じ値とみなす手法が用いられます。 理論面に深入りしすぎず、すぐに使える関数が必要で、多少の計算誤差が許容できる場合は、以下のような関数が便利です。 サンプルコード #include<iostream> using namespace std; // 許容でき