float を使用する C のアルゴリズムを実装しています。i386 でコンパイルして実行すると、armel でコンパイルして実行したときとは異なる結果が得られます。特に float による int の除算では、別の float になります。
この問題を示すために、アルゴリズムからいくつかのコードを抽出しました。
#include <stdio.h>
void main(void)
{
float x = 4.80000019;
float y = 4.80000019;
int a = 38000;
int b = 10000;
int result = (a/x)+(b/y);
printf("%.8f, %.8f\n", x, y); // same on i386 and armel
printf("%f, %f\n", a/x, b/y); // slightly different on each
printf("%d\n", result); // prints 9999 on i386, and 10000 on armel
}
2 つのプラットフォームが異なる結果を生成する理由を誰か説明できますか?
アレックス