回答編集履歴

1 文脈がおかしかったので訂正

KSwordOfHaste

KSwordOfHaste score 18166

2017/02/05 15:38  投稿

epsがマシンイプシロンで、cksは1にマシンイプシロンを加えた値、IEEE浮動小数点数は2進数で仮数が表現されることからepsを1ビットずつずらす(1/2にする)を繰り返しながら1+epsが1と等しくならない最小のepsを求めればそれがマシンイプシロンになりますね。
IEEE浮動小数点数は2進数で仮数が表現されることからepsを1から始めて1ビットずつずらす(1/2にする)を繰り返しながら1+epsが1と等しくならない最小のepsを求めればそれがマシンイプシロンになりますね。
そのままを表すと以下のようになります。元のコードに適合してませんが考え方だけ回答してみました。
```c
#include <stdio.h>
int main(void){
 double eps = 1.0;
 for (;;) {
   double nextEps = eps / 2;
   if (1.0 + nextEps == 1.0)
     break;
   eps = nextEps;
 }
 printf("%g\n", eps);
}
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る