(Beschränken Antwort auf IEEE754).
Dies ist nur möglich, wenn eine der Bedingungen NaN ist, oder eine Manifestation von undefiniertem Verhalten in Ihrem zugreifenden außerhalb der Grenzen des Arrays a
oder b
oder uninitialised Daten zu lesen.
Unter IEEE754 können Sie NaN nicht durch Multiplikation großer Werte erreichen.
Von C++ 11, Sie std::isnan
verwenden können eine NaN vor, dass in oder C zu erfassen, verwenden Sie das Idiom
if (f != f){
// `f` is NaN
}
Also, beiseite die undefinierte Verhalten Einstellung, die Ursache des Problems ist, höher auf den Call-Stack. Ausdrücke wie 0,0/0,0 erzeugen ein NaN.
In Bezug auf Ihre Aussage
einige Wert von 0
die nur geteilt Wert "einen Wert", wenn sie von 0,0 geteilt gibt Ihnen NaN 0: 0.0/0.0
ist NaN und a/0.0
ist + Inf wenn a
ist positiv, und -Inf wenn a
ist negativ.
Was sind die Typen und die Eingabewerte, wenn dies passiert? Fügen Sie Code hinzu, um "nan" zu erkennen und zu brechen. Verwenden Sie einen Debugger, um die eingehenden Werte zu überprüfen. Manchmal ist es nur "Müll rein, Müll raus". – unwind
Debugging ist das erste, was Sie tun. Also, mit dem getan –
@TusharChandra: Bitte nicht downvotes persönlich. Für was es wert ist, sehe ich nichts falsch mit dieser Frage; vielleicht, obwohl Sie es zu zwei Aussagen abkürzen könnten, und den Titel ein bisschen aufräumen. Es ist schwierig, ein funktionierendes Beispiel für solche Dinge zu formulieren, und die Antwort ist konkret, unter der Annahme von IEEE754. – Bathsheba