Was passiert, wenn eine Float-Variable die Float-Grenzen überschreitet?

Ich bemerkte zwei Dinge:

std::numeric_limits<float>::max()+(a small number) gibt: std::numeric_limits<float>::max().

std::numeric_limits<float>::max()+(a large number mögen:std::numeric_limits<float>::max()/3) gibt inf.

Warum dieser Unterschied? Führt 1 oder 2 zu einem ÜBERLAUF und damit zu einem undefinierten Verhalten?

Bearbeiten: Code zum Testen:

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;

Antworten auf die Frage(2)

Ihre Antwort auf die Frage