3章 変数と式2(スライド)

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桁程度)