ist das Gießen der Unendlichkeit zu einer ganzen Zahl ein undefiniertes Verhalten (durch Schwimmers dargestellt)?Wird Unendlich in Ganzzahl undefiniert?
Der Standard sagt:
4,10 Gleitpunktarithmetik integrales Konvertierungen
A prvalue einer Gleitkomma-Typ in einen prvalue eines Integer-Typ umgewandelt werden kann. Die Konvertierung wird abgebrochen. das heißt, der Bruchteil wird verworfen. Das Verhalten ist nicht definiert, wenn der abgeschnittene Wert kann nicht in dem Zieltyp dargestellt werden.
aber ich kann nicht sagen, ob "abgeschnittenen Wert nicht dargestellt werden kann" deckt Unendlichkeit. Ich versuche zu verstehen, warum std::numeric_limits<int>::infinity()
und static_cast<int>(std::numeric_limits<float>::infinity())
unterschiedliche Ergebnisse haben.
#include <iostream>
#include <limits>
int main()
{
std::cout << std::numeric_limits<int>::infinity() << std::endl;
std::cout << static_cast<int> (std::numeric_limits<float>::infinity()) << std::endl;
return 0;
}
Ausgang:
0
-2147483648
Das Ergebnis std::numeric_limits<int>::infinity()
is well defined und gleich 0
, aber ich kann keine Informationen finden über die Unendlichkeit werfen.
Vergessen Sie nicht, dass 'std :: numeric_limits :: infinity()' nur nützlich ist, wenn 'std :: numeric_limits :: has_infinity == true' ist und es nicht ist. –
NathanOliver
@NathanOliver, Sie haben Recht, aber selbst wenn 'has_infinity == false' Ergebnis von 'infinity()' definiert ist. – Gluttton
Ich bin mir ziemlich sicher, dass der Wert unendlich in einem "int" nicht dargestellt werden kann. – aschepler