Dal forum internazionale, informazione rilevata per caso https://gitlab.com/freepascal.org/fpc/source/-/issues/35886 (https://gitlab.com/freepascal.org/fpc/source/-/issues/35886):
- in modalità "delphi" il risultato del typecasting esplicito di una variabile o valore intero differsce da quello della modalità "objfpc". In particolare quello in modalità Delphi è errato.
E' stato risolto 5 anni fà, ma solo nella versione TRUNK con FPC 3.3.1 (anche la candidate 4.0 soffre di questa anomalia).
Questo l'esempio:
program project1;
//{$mode objfpc} //!!! FATE LA PROVA CON TUTTI E DUE I MODI (UNO alla volta) e confrontate i risultati
//{$mode Delphi}
uses
SysUtils;
var
f: Double;
n: Int64;
begin
n := 123;
f := Double(n); //Questo genera un valore non corretto in modalità Delphi
//anche f := Double(123); genera la stessa anomalia
writeln(f);
//Questo è il "workaround" ufficiale per eliminare l'anomalia nelle versioni attuali
f := n.ToDouble;
writeln(f);
end.