La pregunta es, ¿por qué estos fragmentos de código dan resultados diferentes?cálculo simple, diferentes resultados en C# y delphi
private void InitializeOther()
{
double d1, d2, d3;
int i1;
d1 = 4.271343859532459e+18;
d2 = 4621333065.0;
i1 = 5;
d3 = (i1 * d1) - Utils.Sqr(d2);
MessageBox.Show(d3.ToString());
}
y
procedure TForm1.InitializeOther;
var d1, d2, d3 : Double;
i1 : Integer;
begin
d1:=4.271343859532459e+18;
d2:=4621333065.0;
i1:=5;
d3:=i1*d1-Sqr(d2);
ShowMessage(FloatToStr(d3));
end;
El código de Delphi me da 816, mientras que el código C# me da 0. Con una calculadora, consigo 775. Puede alguien por favor, dame una explicación detallada?
¡Muchas gracias!
error en Utils.Sqr quizás? –
Este es un "cálculo simple"? No con números de coma flotante, no lo es. –
Si cambia el tipo de Delphi de doble a extendido, la respuesta es 776, lo que demuestra el punto acerca del redondeo. Es posible que desee consultar una biblioteca bignum u otras bibliotecas científicas si va a tratar con números fp tan grandes. –