C++プログラミング入門:sqrt・sqrtl・sqrtf関数で平方根を正確に計算する方法
C++の数学関数(cmathライブラリ)とは
本記事では、C++の数学関数であるsqrt()、sqrtl()、sqrtf()を使って、double型、long double型、float型それぞれの変数の平方根を高精度に求める方法を解説します。C++の<cmath>ヘッダーには、sinやcosといった三角関数、平方根、ceil(切り上げ)、floor(切り捨て)など、幅広い数学計算用の関数が用意されています。これらの計算メソッドを利用するには、プログラム内で<cmath>ヘッダーファイルを読み込むことが必須です。
sqrt関数(double型)
double sqrt()関数は、double型変数の平方根を精度よく返します。構文は以下の通りです。
構文
double sqrt(double arg)
次のC++コードでは、初期値を持つdouble型変数を定義し、その平方根を計算しています。sqrt()関数がこの値を受け取り、指定した精度で結果を出力します。
サンプルコード
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
int main(){
double val = 225.0;
cout << fixed << setprecision(5) << sqrt(val);
return (0);
}
実行結果
このプログラムの出力は、小数点以下5桁の精度で表示されます。
15.00000
sqrtl関数(long double型)
long double sqrtl()関数は、long double型変数の平方根を精度よく返します。非常に大きな数値を扱う場合に特に有効な関数です。構文は以下の通りです。
long double sqrtl(long double arg)
以下は、sqrtl()関数を使用してlong double型変数の平方根を計算する例です。
サンプルコード
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
int main(){
long long int val = 1000000000000000000;
cout << fixed << setprecision(10) << sqrt(val);
return (0);
}
実行結果
コードエディタでコンパイルして実行すると、入力されたlong型変数の計算結果が以下のように表示されます。
1000000000.000000000
sqrtf関数(float型)
float sqrtf()関数は、float型変数の平方根を精度よく返します。構文は以下の通りです。
構文
float sqrtf(float arg)
構文に従い、float型変数をsqrtf()関数に渡すことで、平方根を計算できます。
サンプルコード
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
int main(){
float val = 300.0;
cout << fixed << setprecision(5) << sqrtf(val);
return (0);
}
実行結果
指定したfloat型変数の平方根は、以下のように出力されます。
17.32051
-
C++で直方体の体積と表面積を計算するプログラムの作成方法
直方体とは? 直方体とは、6つの長方形の面から構成される三次元の立体図形です。各面の縦と横の長さが異なるため、全体として異なる長さの辺を持っています。立方体と直方体の違いは、立方体では長さ・高さ・幅がすべて等しいのに対し、直方体ではこれら3つが必ずしも同じではないという点です。 直方体の主な性質は以下のとおりです。 6つの面 12本の辺 8つの頂点 以下は直方体のイメージ図です。 問題の概要 直方体の長さ(L)、幅(W)、高さ(H)が与えられたとき、その総表面積と体積を求めるのが課題です。表面積とは各面が占める空間の広さのことであり、体積とはその形状が内包できる空間の大きさのことです。
-
C++でfloatとdoubleを比較する方法|許容誤差(EPSILON)を使った実装例
C++においてfloat型やdouble型などの浮動小数点数を比較する方法は、最終的に何を実現したいかによって異なります。浮動小数点数は内部で2進数の近似値として表現されるため、「==」演算子による単純な等価比較では意図しない結果になることがあります。そこで一般的には、許容できる誤差(イプシロン)を設定し、その範囲内であれば同じ値とみなす手法が用いられます。 理論面に深入りしすぎず、すぐに使える関数が必要で、多少の計算誤差が許容できる場合は、以下のような関数が便利です。 サンプルコード #include<iostream> using namespace std; // 許容でき