3章 変数と式−2 double型 入力 %lg を使用する 出力 %e、%f、%gが使用できる %e ±d.dddddde±ddd %f ±d.dddddd %g 表示する桁数に応じて%eまた は%f (dは数字0-9) double型 %e ±d.dddddde±ddd %e 小数点以下6桁 %ne 全体でn桁 %n.me 全体でn桁、小数点以下m桁 例:%15.3e 全体で15桁小数点以下3桁 (n、mは数値) double型 %f ±d.dddddd %f 小数点以下6桁 %nf 全体でn桁 %n.mf 全体でn桁、小数点以下m桁 例:%15.3f 全体で15桁小数点以下3桁 (n、mは数値) /* 666666 Tachibana Masayoshi */ /* p74 list 3.5X */ #include <stdio.h> int main(void) { const double h = 6.63e-34; const double Na = 6.02e23; printf("h = %f Na = %f\n",h,Na); printf("h = %0.36f Na = %15.0f\n",h,Na); printf("h = %e Na = %e\n",h,Na); printf("h = %0.1e Na = %1.2e\n",h,Na); printf("h = %g Na = %g\n",h,Na); printf("h = %f Na = 15.1g\n",h,Na); return 0; } list35x.c 型と書式 man 3 scanf または man 3 printf で確認できる。 %[最小幅][.精度][長さ]型指定 長さ hh charを数値として入出力 h short int l longまたはdouble ll long long L long double 型指定 d 符号付き整数 u 符号無し整数 e f 浮動小数点数 g c 文字 printfの場合、double型のlは省略できる。 /* 666666 Tachibana Masayoshi */ /* p77 */ #include <stdio.h> int main(void) { double a,b,c; a = 0.1; b = 0.1*0.1*0.1*0.1*1000; c = a-b; if ( (a-b) == 0.0) { printf("誤差がない\n"); } else { printf("誤差が%30.28f である\n",c); } return 0; } p77.c 浮動小数点数の計算での誤差 p77.cの実行結果 誤差が-0.0000000000000000277555756156 である • 桁数が有限であるために誤差を生じる • 丸め誤差 • 誤差を含む数の計算で生じる誤差 • 桁落ち • 桁数の大きな数どうしの差を求めるとき • 情報落ち • 絶対値の大きい数と小さい数の加減算で 代入式(P87) • 左辺値 代入演算子 右辺値 – 右辺値の値を計算し、代入演算子の規則に 従って、右辺値に適用する式 • 代入式も値を持つ – 値は代入後の左辺値の値 • 代入演算子(P87) – = , += , -= , *= , /= , %= – <<= , >>= , &= , |= , ^= 代入式(2) • • • • • • = a=a+b += a+=b == a=a+b -= a-=b == a=a-b *= a*=b == a=a*b /= a/=b == a=a/b %= a%=b == a=a%b 代入式(3) • • • • • <<= a<<=b == a=a<<b >>= a>>=b == a=a>>b &= a&=b == a=a&b |= a|=b == a=a|b ^= a^=b == a=a^b 代入式(4) • • • • • << >> & | ^ 左シフト 右シフト ビットAND ビットOR ビット排他的OR 詳しくは 情報処理概論で... 演算子の優先順位-1 • Cにはたくさんの演算子がある – すべてを「今」覚える必要はない • 演算子には優先順位がある – かけ算は足し算より先にやる – すべて覚えるのは大変 • うろ覚えで間違えるよりは表を見ること • 括弧を使って確実に 演算子の優先順位-2 4章までに出てくるものをリストにした 高 括弧 () 単項演算 + - ++ -- (cast) sizeof 乗除 */% 加減 +比較 < > <= => == != 論理的AND && 論理的OR || 代入演算 = *= /= %= -= += など 評価の結合規則 右から左 なし 左から右 低 演算子の優先順位-3 評価の結合規則 左から右 b+c-d+e (b+c)-d)-e 右から左 a=b=c=0 a=(b=(c=0)) 整数型と浮動小数点型の混合演算 • 一つの式の中で異なる型の値を混ぜて使う – 型変換が行われる – 精度の高い方へ型変換が行われるが、精度が失われ ることもある • 代入における型変換 – 代入される左辺の型にあわす – (切り捨てが起こることがある) • キャスト(cast) – 明示的な型変換 – 例: (double)i/(double)j i、jがint型でもdoubleに変換して計算 型変換の順序 short int int および long int float double long double float型の変数を使用する場合の注意 int および long int から float に変換すると 精度が失われる場合がある。 (floatの精度は6桁程度)
© Copyright 2024 ExpyDoc