Ich habe ein C++ - Programm, das unter Windows/Linux ausgeführt wird. Unter Windows wird das Programm mit Visual Studio 2012 kompiliert und Linux mit GCC kompiliert. Wenn verdoppelt Strings sprintf Visual Studio Umwandlung wird für Verbindungen eine andere Rundungsmethode als der GCC-Compiler - dh Dezimalzahlen in einem Compiler 5.C++ Rundungsverhalten Konsistenz für Bindungen mit Sprintf
Visual Studio beenden erscheint round half away from zero auszuführen, während GCC round even aka Banker tut Runden.
Runde ist sogar das gewünschte Verhalten.
Kann das Rundungsverhalten für Sprintf-Format-Strings in Visual Studio/Windows geändert werden? Da muss ich die Rundung konsequent zwischen den beiden verhalten.
Hier ist eine kleine Probe C++ Programm, das das oben beschriebene Verhalten zeigt:
int main()
{
char buffer[100];
double x;
for (x = -0.5; x <= 10.5; x += 1.0)
{
sprintf(buffer,"%4g %.0f\n", x, x);
std::cout << buffer;
}
return 0;
}
Windows-Ausgang. Zahlen sind gerundet, weg von Null:
OSX Ausgabe mit xCode zusammengestellt. Zahlen sind gerundet Verwendung rund sogar in Richtung der geraden Zahl:
Ausgang OSX:
Sie könnten in diesem Artikel, und seine Kommentare aussehen wollen: http://www.exploringbinary.com/inconsistent-rounding-of-printed-floating-point-numbers/ – NathanOliver
Sie immer Ihre eigene {*} printf verwenden können Funktionen – technosaurus
[Rundungsunterschiede auf Windows vs Unix-basierten System in Sprintf] (http://stackoverflow.com/q/4649554/995714) –