Wenn ich das folgende C++ - Programm in einem 32-Bit-PowerPC-Kernel ausführe, der Software-Floating-Emulation unterstützt (Hardwarefließkomma deaktiviert), bekomme ich eine falsche bedingte Auswertung. Können mir einige sagen, was das mögliche Problem ist?Falsches Gleitkomma-Verhalten
#include <stdio.h>
int main() {
int newmax = 1;
if ((newmax + 0.0) > 256) {
printf("\nShouldn't be here\n");
} else {
printf("\nShould be here\n");
}
}
Compile:
powerpc-linux-g++ -msoft-float -c floating.cxx
powerpc-linux-g++ -o floating floating.o
Ausgabe im Zielsystem:
[linux:/]$ ./floating
Shouldn't be here
Können Sie mir sagen, was Kernel ist das? Meine beste Vermutung ist, dass seine Emulation irgendwie dem Gleitkommastandard nicht gehorcht und eine ungenaue Darstellung von Null hat. Bedenken Sie auch, dass 0.0 standardmäßig doppelt ist und nicht float. Vielleicht unterstützt Ihr Software-Emulator kein Double. – speeder
Sie sollten -msoft-float auch beim Linken angeben. –
@speeder. Dies ist ein benutzerdefinierter Kernel 2.6.32.59. Ich bezweifle auch, dass dies ein Softwareemulationsproblem im Kernel sein könnte. – rajachan