¿Hay alguna manera de asegurarse de que el resultado de la aritmética de punto flotante sea el mismo tanto en Linux como en Windows?

Mi programa se ejecuta tanto en Linux como en Windows, tengo que asegurarme de que la aritmética de punto flotante obtenga el mismo resultado en diferentes sistemas operativos.

Aquí está el código:

for (int i = 0; i < 100000; ++i)
{
    float d_value = 10.0f / float(i);
    float p_value = 0.01f * float(i) + 100.0f;
}

Yo suelo "g ++ -m32 -c -static -g -O0 -float-store"para compilar el código en linux. Uso" / fp: precise / O2 "para compilar el código en windows con vs2005.

Cuando imprimo el "d_value" y el "p_value", el "d_value" es el mismo tanto en Linux como en Windows. Pero el "p_value" es diferente a veces. Por ejemplo, imprima "p_value" con formato hexadecimal:

windows:  42d5d1eb
linux:    42d5d1ec

¿Por qué dosis esto sucede?

Mi versión g ++ es

Configured with: ../src/configure -v --with-pkgversion='Debian 4.4.5-8' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-targets=all --with-arch-32=i586 --with-tune=generic --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.4.5 (Debian 4.4.5-8)

Yo uso la bandera-ffloat-store, por la sugerencia de alguien aquí:Diferente comportamiento de redondeo matemático entre Linux, Mac OS X y Windows.

Respuestas a la pregunta(2)

Su respuesta a la pregunta