Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: DragoRosso - Aprile 22, 2025, 12:31:10 pm

Titolo: Type casting esplicito - Double
Inserito da: DragoRosso - Aprile 22, 2025, 12:31:10 pm
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:

Codice: [Seleziona]
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.