問題是,爲什麼這些代碼片段會給出不同的結果?簡單的計算,c#和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());
}
和
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;
德爾福代碼給了我816,而C#代碼給了我0.1使用計算器,我得到775可有人請給我一個詳細的解釋?
非常感謝!
Utils.Sqr中的錯誤也許? – 2009-04-29 15:58:47
這是一個「簡單計算」?不是浮點數不是。 – 2009-04-29 16:07:41
如果您將Delphi類型從double更改爲extended,則答案爲776,這證明了四捨五入的意思。如果您打算處理這麼大的fp數字,您可能需要查看一個bignum庫或其他科學圖書館。 – 2009-04-29 16:24:33