Warum kann nan durch doppelte Berechnung verhindert werden?

8

Manchmal habe ich eine Nan als Ergebnis der Multiplikation von no-nan b und c:

%Vor%

oder als Ergebnis von floor ():

%Vor%

Doppelte Berechnung und Verwendung von sleep () verhindern dieses Problem:

%Vor%

CPU ist ein AMD Athlon (tm) 64 X2 Dual Core Prozessor 3400 +

CPU-Temperatur :

%Vor%

Kann dieses Problem auf CPU-Timing-Funktionen zurückzuführen sein? Oder gibt es andere Ursachen für das Problem?

AKTUALISIEREN

Ich habe herausgefunden, dass das folgende Programm nan auf dieser Maschine produziert:

%Vor%     
Alex 11.02.2013, 19:09
quelle

2 Antworten

1

Eigentlich ist es ein Hardware-spezifisches Problem. Das folgende Programm auf der aktuellen Plattform arbeitet 10-20 Sekunden:

%Vor%     
Alex 16.02.2013, 20:03
quelle
5

Gibt es eine Möglichkeit, dass ein Stack oder Speicher überschrieben wird, der an einer anderen Stelle im Programm auftritt - schlechte Thread-Handhabung oder schlecht gehandhabter Mutex? Das Hinzufügen eines Schlafs, um das Problem zu "beheben", lässt mich glauben, dass es sich um ein Nebenläufigkeitsproblem handeln könnte. Wenn möglich, debugge die Werte und sieh, ob sie sich im laufenden Betrieb von anderen Stellen mit einem Schreib-zu-Speicher-Unterbrechungspunkt oder vielleicht nur ein paar printfs ändern (was das Timing des Problems ändern und es ebenfalls verbergen kann).

    
Michael Dorgan 11.02.2013 19:12
quelle

Tags und Links