ホーム » スタッフ » 斉藤徹 » 浮動小数点の扱いと文字列の扱い

2009年5月
« 4月   6月 »
 12
3456789
10111213141516
17181920212223
24252627282930
31  

最近の投稿(電子情報)

アーカイブ

カテゴリー

浮動小数点の扱いと文字列の扱い

N進数表現と数値範囲の説明の続きとして、 実数型(float,double)の取り扱いについて説明する。

実数の取り扱い

実数の取り扱いとして、double/float型の内部データ保存形式の説明を行う。 (参考:IEEE 754 wikipedia.jp)

符号(s) 指数(e) 符号(d)
float 1[bit] 8[bit] 23[bit]
double 1[bit] 11[bit] 52[bit]

double型の精度は、 より、約52*0.301=15.6桁相当といった説明。

実数型の計算のトラブル事例もいくつか紹介。

int sum , cnt ; // 合計とデータ数で、平均を表示
printf( "%f" , sum / cnt ) ; // めちゃくちゃな答が表示される。
// sum / int は、整数同士の計算で3となる。
//    小数点以下はも止まらない。
// "%f" は、浮動小数点用。第2引数に3があっても、
//    正しく表示できない。
printf( "%lf" , (double)sum / (double)cnt ) ; // 型キャスト
double a , h // 三角形の底辺と高さとする。
double s ;
s = (1/2) * a * h ; // 面積を計算したい
// この答は常に0が表示される。
// 1/2 は、整数同士で計算され、0.5は0として扱われる。
s = 0.5 * a * h ;
s = (1.0/2.0) * a * h ; // 2.0と書けば実数どうし
s = a * h / 2 ; // 実数/整数は、2.0 に自動的に型拡張される

文字列の扱い

C言語における文字列の扱いを説明するために、 ASCIIコード表(JISコード表)などの説明をする。 配布資料中の例題で、10進、8進、16進変換、 文字コード間の加減算を行う。 制御文字'\n','\r','\f'などを、タイプライタの動き を例にしながら、説明を行う。