Cで DBL_MAX-1.0 の値が欲しかったのですが、実際に実行してみると結果の値は DBL_MAX のままでした。
気になって下のコードで実験してみました。
C
1#include <stdio.h> 2#include <limits.h> 3#include <float.h> 4 5int main(void) { 6 7 printf("\n"); 8 9 double dm=DBL_MAX; 10 double r1,r2,r3,r4,r5; 11 12 r1= dm - 1.0 - dm; 13 r2= dm - 123.0 - dm; 14 r3= dm - 12345.0 - dm; 15 r4= dm - 1234567.0 - dm; 16 r5= dm - 123456789.0 - dm; 17 18 printf("r1 = %.5lf\n",r1); 19 printf("r2 = %.5lf\n",r2); 20 printf("r3 = %.5lf\n",r3); 21 printf("r4 = %.5lf\n",r4); 22 printf("r5 = %.5lf\n\n",r5); 23 24 25 26 27 float fm=FLT_MAX; 28 float s1,s2,s3,s4,s5; 29 30 s1= fm - 1.0 - fm; 31 s2= fm - 123.0 - fm; 32 s3= fm - 12345.0 - fm; 33 s4= fm - 1234567.0 - fm; 34 s5= fm - 123456789.0 - fm; 35 36 printf("s1 = %.5f\n",s1); 37 printf("s2 = %.5f\n",s2); 38 printf("s3 = %.5f\n",s3); 39 printf("s4 = %.5f\n",s4); 40 printf("s5 = %.5f\n\n",s5); 41 42 43 44 45 int im=INT_MAX; 46 int t1,t2,t3,t4,t5; 47 48 t1= im - 1.0 - im; 49 t2= im - 123.0 - im; 50 t3= im - 12345.0 - im; 51 t4= im - 1234567.0 - im; 52 t5= im - 123456789.0 - im; 53 54 printf("t1 = %d\n",t1); 55 printf("t2 = %d\n",t2); 56 printf("t3 = %d\n",t3); 57 printf("t4 = %d\n",t4); 58 printf("t5 = %d\n\n",t5); 59 60 return 0; 61} 62
ですが、結果は
r1 = 0.00000 r2 = 0.00000 r3 = 0.00000 r4 = 0.00000 r5 = 0.00000 s1 = 0.00000 s2 = 0.00000 s3 = 0.00000 s4 = 0.00000 s5 = 0.00000 t1 = -1 t2 = -123 t3 = -12345 t4 = -1234567 t5 = -123456789
となり、INT_MAXのとき以外は全く期待した値になってくれませんでした。なぜでしょうか?
コンパイラ:gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04)
エディタ :Emacs 24.3.1

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/13 03:51