数値の型とN進数
先日の変数の寿命とスコープの話の次ということで、数値の型とN進数について説明。
数値の型によって、初心者がやりそうな間違いを説明しながら、 C言語の型変換が、「精度が異なる場合は、精度のいい方に型変換」とか「型キャスト」を説明。
int a[4] = { 10 , 11 , 12 , 20 } ; int sum = 0 , count = 0 , i ; for( i = 0 ; i < 4 ; i++ ) { sum += a[i] ; count++ ; } printf( "%f" , sum / count ) ; // 実行結果は、%fとintの型の不一致で、異常値の表示。 // (double) sum / (double) count と書くべき。 double x ; for( x = 0 ; x < 3.141592 ; x += 1/18 * 3.141592 ) { printf( "%f %f\n" , x , sin( x ) ) ; } // 1/18*3.14 は、1/18が整数除算で0になるため // 無限ループ
N進数
N [bit]で扱える数値が であらわせ、 概数を求める場合、 計算できることや、 より、 で大体の桁数が計算できることを説明。
を説明し、元の数をNで割った余りを下の桁から書き並べると、N進数に直せることを説明。 この後、8進数、16進数、10進数変換の理解度を確認。 C言語での0123の8進数表記や、0x123の16進数表記、printfでの"%o","%x"なども説明。
次に、小数点以下のN進数の説明を行う。 より、小数点以下にNをかけると、整数部にN進数の小数点上位1桁が得られることを説明する。 これより、0.1)10といった値を2進数にすると、無限循環小数になることを示す。 この結果、C言語で、0.1を10回積算しても、正確に1.0といった値にならない可能性があることを紹介する。