bemerkte ich zwei Dinge:Wenn eine Float-Variable die Float-Grenzen verlässt, was passiert?
std::numeric_limits<float>::max()+(a small number)
gibt:std::numeric_limits<float>::max()
.std::numeric_limits<float>::max()+(a large number
wie:std::numeric_limits<float>::max()/3)
gibt inf.
Warum dieser Unterschied? Führt 1 oder 2 zu einem OVERFLOW und damit zu einem undefinierten Verhalten?
Edit:-Code für diese Prüfung:
1.
float d = std::numeric_limits<float>::max();
float q = d + 100;
cout << "q: " << q << endl;
2.
float d = std::numeric_limits<float>::max();
float q = d + (d/3);
cout << "q: " << q << endl;
können Sie bitte den Code angeben, mit dem Sie das Verhalten 1 und 2 "abgeleitet" haben? –
Intuitiv: float kann 7 signifikante Ziffern speichern. Das Hinzufügen einer kleinen Zahl zu 3.4E38 fügt also nicht genügend Ziffern hinzu, um einen Unterschied zu machen. Sie müssen mindestens ~ 3.4E31 hinzufügen. –
Hier ist der Code: 1- float d = std :: numerische_grenzen :: max(); float q = d + 100; cout << "q:" << q << endl; 2- Gleitkomma d = std :: numeric_limits :: max(); float q = d + (d/3); cout << "q:" << q << endl; – WildThing