Stavo creando un'applicazione in Delphi quando ho notato uno strano fenomeno:
Funzione realtostr, che trasforma numeri reali in stringhe:
il problema e che se in input viene dato per esempio 3.4 l'output in stringa è: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;
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?