GAIO CLUB
#include <stdio.h>
float F = 4294967296.0f; // 0x100000000
int main(void)
{
printf("before : %f¥n",F);
F += 100.0f;
printf("after : %f¥n",F);
return 0;
}
before : 4294967296.000000
after : 4294967296.000000
#include <stdio.h>
long L = 0x0AAAAAAA;
float F;
int main(void)
{
printf(" L : %d (0x%08X)¥n",L,L);
F = L;
printf(" F : %f <----- 24ビット化、丸め処理¥n",F);
L = F;
printf(" L : %d (0x%08X)¥n",L,L);
return 0;
}
L : 178956970 (0x0AAAAAAA)
F : 178956976.000000 <----- 24ビット化、丸め処理
L : 178956976 (0x0AAAAAB0)
#include <sstdio.h>
long L = 0x0FFFFFFF;
float F;
int main(void)
{
printf(" L : %d (0x%08X)¥n",L,L);
F = L;
printf(" F : %f <----- 24ビット化、丸め処理¥n",F);
L = F;
printf(" L : %d (0x%08X)¥n",L,L);
return 0;
}
L : 268435455 (0x0FFFFFFF)
F : 268435456.000000 <----- 24ビット化、丸め処理
L : 268435456 (0x10000000)
#include <stdio.h>
float F1 = 4294967296.0f; // 0x100000000
float F2 = 100.0f; // 0x000000064
float F;
double D;
int main(void)
{
printf(" F1 : %12.1f¥n",F1);
printf(" F2 : %12.1f¥n",F2);
F = F1 + F2;
printf(" 1. F : %13.1f <--- F1 + F2¥n",F);
D = (double)(F1 + F2); // 大きな型へのキャストはルール違反
printf(" 2. D : %13.1f <--- (double)(F1 + F2) NG ¥n",D);
D = (double)F1 + F2;
printf(" 3. D : %13.1f <--- (double)F1 + F2¥n",D);
return 0;
}
F1 : 4294967296.0
F2 : 100.0
1. F : 4294967296.0 <--- F1 + F2
2. D : 4294967296.0 <--- (double)(F1 + F2) NG
3. D : 4294967396.0 <--- (double)F1 + F2
浅野 昌尚(あさの まさなお)
ガイオ・テクノロジー株式会社
開発1部 QTXグループ
1980年代から30年以上にわたり汎用構造のCコンパイラ開発に従事し、その間に8ビットマイコンからRISC・VLIW・画像処理プロセッサまで、さまざまなCPU向けのクロスCコンパイラを開発。