第44章 いろんな計算を

 コンピューターは計算をする機械という意味です。今までは四則演算が中心でしたが、計算といえば他に累乗、三角関数、対数などもありますね。(まだ知らない人も、そういうもんがあると思って下さい。)今回はそういった計算をやってみたいと思います。



 では、いってみましょう。


 今まで行ってきた計算はどれも四則演算でした。ですが、実際には平方根などの計算を行うことも必要になってくるでしょう。このような計算は全て math.h というヘッダファイルで宣言されています。

 また、このような計算をするときは、整数ではなく普通小数(実数)で行います。(コンピューターの世界では整数型と小数型は内部的な処理の方法が違います。)int 型は普通整数しか扱えません。そこで、小数用の型というものが存在します。float と double と long double です(第21章も参照)。

 今まで小数の計算については特に触れませんでしたが、大体整数と同じなので詳しくは最後に話します。


 では、実際に math.h の関数を使ってみましょう。簡単なところから、直角三角形の直角を挟む2辺の長さを入力し、最後の1辺(斜辺)を求めるプログラムを組んでみましょう。

 こういうときは有名なピタゴラスの定理を使って求めるのが常套ですね。ですが、四則演算だけを使っていたのでは、斜辺の長さの自乗を求めることは出来ても斜辺の長さを求めることはできません。

 そこで、平方根を求める関数 sqrt を使います。(sqrt は square-root の略です。)では、実際のプログラムを見てみましょう。

プログラム
// Math1.cpp
#include <iostream.h>
#include <math.h>     // math.h をインクルードする!

int main()
{
    double a, b;

    cout << "直角を挟む2辺の長さを入力して下さい > ";
    cin >> a >> b;

    cout << "斜辺の長さは "
         << sqrt(a * a + b * b) << " です。" << endl;

    return 0;
}
実行結果
直角を挟む2辺の長さを入力して下さい > 5 12
斜辺の長さは 13.0000 です。

 特に難しいところはありませんね。sqrt という関数を、普通の関数の使い方で使っているだけのことです。


 他にも math.h では色々な関数が宣言されています。以下に表にしましたので、参考にして下さい。

関数名 引数 機能
abs, fabs 任意の値 絶対値を求めます。abs は整数型用、fabs は小数型用です。
floor, ceil 任意の値 小数第1位の切り捨て、切り上げを行います。floor が切り捨てで、ceil が切り上げです。
fmod 2つの任意の値 小数の割り算を行い、余りを求めます。
modf 1:任意の値
2:int 型変数のアドレス
実数を、整数部分と小数部分に分割します。小数点以下の部分を返し、整数部分は第2引数で渡した変数で受け取ります。
sqrt 任意の0か正の値 正の平方根を返します。
pow 2つの任意の値 第1引数の第2引数乗を求めます。
exp 任意の値 エキスポネンシャルです。自然対数の底e(≒2.718281828)の累乗を求めます。
log, log10 任意の正の値 対数を求めます。log は自然対数、log10 は常用対数です。
sin, cos, tan 角度
(単位はラジアン)
三角関数です。それぞれサイン、コサイン、タンジェントを求めます。
asin, acos −1から1までの数値 三角関数の逆関数です。それぞれアークサイン、アークコサインを求めます。
atan, atan2 任意の値
(atan2 は引数が2つ)
アークタンジェントです。atan2 は第1引数を第2引数で割った値についてアークタンジェントを求めます。
sinh, cosh, tanh 任意の値 双曲線三角関数です。それぞれハイパボリックサイン、ハイパボリックコサイン、ハイパボリックタンジェントを求めます。

 ざっと書きましたが、別に覚える必要はありません。必要になったときに調べればよいのです。それに、名前はそのまんまのが多いですしね。

 中にはよく分からない関数もあるかもしれませんが、重要なのはこんなところです。おいおい使うこともあるでしょう。


 では、最後に小数型について話します。

 小数の型は初めに話した、float 、double 、long double の3つでした。整数にも色々な型がありましたね。小数型のそれぞれの違いは、整数型の時と同じでサイズの違いです。つまりは精度の違いです。

 float が32ビット(4バイト)、double が64ビット(8バイト)、long double も64ビット(8バイト)です。それぞれの精度は、float が7桁、double が15桁、long double も15桁です。

 昔は long double は80ビット(10バイト)で、精度は19桁でした。今は double と同じになってしまったようです。

 この中では、精度がいいので double 型を使うのが普通です。しかし、double のサイズは float の2倍もあるので、サイズが気になるようなときは(配列変数など)float を使うこともあるかもしれません。でも、精度がかなり犠牲になるので実際問題 float はあまり使わないですね。

 処理速度ですが、float だと速いということはないです。むしろ、double の方が速いと聞いたほどです。この辺はCPUによるかもしれないので、あまり一般的にはこうだと断言はしませんが。


 今回はこれで終わりです。今回の要点は以下の通りでした。


 次回からはコンピューターならではの演算について話していきます。次回はその準備段階として、2進数と16進数について話します。第21章も参考にして下さい。では次回まで、さようなら。


第43章 ?: ??? | 第45章 2進数と16進数

Last update was done on 2000.7.29

この講座の著作権はロベールが保有しています