Stavo creando un'applicazione in Delphi quando ho notato uno strano fenomeno:
Funzione realtostr, che trasforma numeri reali in stringhe:
codice:
function realstr(x:real):string;
var tempx, i:integer;
begin
realstr:='';
tempx:=trunc(x);
realstr:=realstr+inttostr(tempx)+',';
x:=x-tempx;
repeat
tempx:=trunc(x*10);
x:=(x*10)-tempx;
realstr:=realstr+intstrnew(tempx);
until (x=0) and (tempx=0);
end;
il problema e che se in input viene dato per esempio 3.4 l'output in stringa è:
3,3999999999999911182158 etc....
Ho escluso un difetto nel codice, optando invece per un qualche errore (c'entra niente l'overflow?) relativo al processore e di come questo rappresenta i numeri reali.
Ma qual'è il vero motivo? E come potrei fare per eluderlo mantenendo però la corrispondenza perfetta tra input e output?