[QUOTE=Uwe Raabe;1408125]
Das wird auch nicht explizit gemacht, sondern entsteht durch die Multiplikation zweier sehr kleiner Zahlen. Man kann das im Debugger nachvollziehen.
Ich würde hier dem Debugger nicht unbedingt trauen, was wird denn für x nach x := PDouble(@twopm1030)^ angezeigt?
Interessanterweise gibt es bei FPC-64 noch eine zusätzliche Variante: x*x wird richtig berechnet, aber x := ldexp(1,-1030) crasht mit
EOverflow: Floating point overflow
Edit: Da scheint noch mehr faul zu sein. Und vermutlich liegt das Problem in ldexp. Ich habe jetzt den Debugger angeworfen und x ist korrekt angezeigt nach der Konstantenzuweisung. Allerdings hat er mit auch x:=ldexp(1,-510) als 0 angezeigt und das wird durch writeln bestätigt.
Die 32-Bit-Version zeigt richtig an
9.32292591400026E-0156.