Float Literale und ill-formed-ness



  • Hallo,

    ein Program das zu große Literale für den jeweils größten Datentyp enthält gilt ja (nach dem was ich bis jetzt gelesen habe) als "ill-formed" und sollte damit UB auslösen, richtig soweit?

    Bei integer Literalen ist das ja relativ einfach, wenn das Literal größer ist als der größt-mögliche integer Typ fassen kann, ist das Program ill-formed.

    Wie ist das jetzt aber bei float/double Literalen, speziell mit Stellen nach dem Komma? Bei floats muss ja auch beim rechnen eh immer gerundet werden, sind dann Programme wie etwa

    double x = 1.00000000000000000000000000000000000000000000000000000000000000001;
    

    auch ill-formed? Oder betrifft das nur die Stellen vor dem Komma?


  • Mod

    ein Program das zu große Literale für den jeweils größten Datentyp enthält gilt ja (nach dem was ich bis jetzt gelesen habe) als "ill-formed" und sollte damit UB auslösen, richtig soweit?

    ill-formed != UB. Sonst richtig.

    Wie ist das jetzt aber bei float/double Literalen, speziell mit Stellen nach dem Komma?

    Da wird einfach entsprechend approximiert.

    [lex.fcon]/1 schrieb:

    If the scaled value is in the range of representable values for its type, the result is the scaled value if representable, else the larger or smaller representable value nearest the scaled value, chosen in an implementation-defined manner.



  • Ah, ok vielen Dank 👍


Log in to reply