第五回 小数をコンピュータで表現する [浮動小数点数と四則演算と型変換]

  • 前回
    • int 型 の勉強
    • 表示するときは,%d
    • catとリダイレクト
  • 今回
    • double型 
    • 表示するときは%lf
    • 四則演算
    • ルート
    • 入力
    • catとリダイレクト

次回からたぶんプログラミング的なのにちょっとはいります!

http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0
小数をコンピュータで表す.
整数と小数は全然違う
誤差がでる(次週)



  • 前回の復習

test5_1.c

#include<stdio.h>
int main(){
  int i;
  i=2;
  printf("iは%dです\n",i);
  return 0;
}

移動して,コンパイルして実行

gcc test5_1.c -o a.out
./a.out

今回はファイルにかきだしてみる
> ファイル名を使うとファイルにかきだしてくれる.

./a.out > tmp.txt<<

ファイルの内容をみる
cat ファイル名

cat tmp.txt

他にも

ls > abcd.txt

cat abcd.txt

  • 今回

浮動小数

#include<stdio.h>
int main(){
  double x;
  x=2.324;
  printf("xは%lfです\n",x)
  return 0;
}

コンパイルして実行.
ポイントはint(整数) -> double (小数点の数)
%d (整数の表示) -> %lf (実数の表示)

になっていること.

整数と小数が入り混じった例

#include<stdio.h>
int main(){
  double x;
  int i;
  int j;
  i=3;
  j=4;
  x=2.324;
  printf("xは%lfです i=%dです,jは%dです\n",x,i,j)
  return 0;
}

四則演算

+ 足し算 例 3+1=4; 3.0+1.0=4.0
- 引き算 例 3-2=1; 3.0-2.0=1.0
* 掛け算 例 3*2=6; 3.0*2.0=6.0
/ 割り算 例 7/2=3; 7.0/2.0=3.5
% あまり 例 7%2=1; なし

整数と浮動小数点で割り算の動きが違うので要注意

浮動小数点数

#include<stdio.h>


int main(){
  double x;
  double y

  x=7.0;
  y=2.0;
  printf("xとyの積は%lfです. x割るyは%lfです x%yは%lfです",x*y,x/y,x%y)
  return 0;
}

コンパイル実行
電卓で確認
暗黙の型変換?



整数

#include<stdio.h>

int main(){
  int x;
  int y

  x=7;
  y=2;
  printf("xとyの積は%dです. x割るyは%dです xをyで割った余りは%dです",x*y,x/y,x%y)
  return 0;
}

割り算とあまりが実数のときに代わっているので注意

型の変換と暗黙の型変換:

警告! 暗黙の型変換です、、

を理解する.

とりあえず,警告とエラー

警告:なんとかコンパイルできるけど、なんかあやしい,想定外の動きするかもよ!
エラー:間違いがあって、コンパイルできません!

警告は,とりあえず,無視される場合が多いかも。
「まっ、警告でてるけど、いいか…」

    • 暗黙の型変換

整数か浮動小数点の型がかわると結果がかわってしまう場合がある.
そこで,整数か浮動小数点がコンピュータに伝える必要がある.
そこで型変換(キャスト演算子).

(1)暗黙の型変換: 
コンピュータが自動的によきにはからって型を変換してくれる(想定外もありえる)
(2)明示的な型変換(キャスト):
人間が型変換を指定してやる.(int) とか (double)とかを使う.

暗黙の型変換

#include<stdio.h>
int main(){
 int i;
 double j;
 i=2;
 j=i; //整数型の変数を浮動小数点にいれてしまっている!
}

コンピュータの中で自動的に整数と浮動小数点の変換をおこなってくれる
→暗黙の型変換

明示的にはこうやる1

#include<stdio.h>
int main(){
 int i;
 double j;
 i=2;
 j=(double)i; //(double) はdoubleに変換しなさいという意味.

}


明示的にはこうやる2

#include<stdio.h>
int main(){
 int i;
 double j;
 j=2;
 i=(int)j; //(int) はintに変換しなさいという意味.
  printf("%d\n",i);
   printf("%lf\n",i); 
}


明示的にはこうやる3(無理なこと 2.324は整数には素直には変換できない)

#include<stdio.h>
int main(){
 int i;
 double j;
 j=2.324;
 i=(int)j; //(int) はintに変換しなさいという意味.
 printf("%d\n",i);
}


暗黙(無理なこと 2.324は整数には素直には変換できない)

#include<stdio.h>
int main(){
 int i;
 double j;
 j=2.324;
 i=j; //型が違う
 printf("%d\n",i);
}


暗黙の型変換の例:

#include<stdio.h>

int main(){
  double x;
  int y

  x=7;
  y=2;
  printf("xとyの積は%dです. x割るyは%lfです",x*y,x/y,x%y)
  return 0;
}


キャストの型変換(明示的な型変換)

#include<stdio.h>

int main(){
  double x;
  int y

  x=7;
  y=2;
  printf("xとyの積は%lfです. x割るyは%lfです",x*y,x/(double)y,x%y)
  return 0;
}
#include<stdio.h>

int main(){
  double x;
  int y

  x=7;
  y=2;
  printf("xとyの積は%dです. x割るyは%dです",(int)x*y,(int)x/y,x%y)
  return 0;
}