我創建的一個計算器程序幾乎完美的工作,除了Math.Sin()和Math.Log()似乎有一些不準確之處,我不能似乎到了最底層。我會盡力給予儘可能多的細節。C#Math.Sin()和Math.Log()不準確
Math.Sin()問題:
首先,這不是一個弧度的問題(至少到目前爲止我可以告訴)。數字作爲double輸入Math.Sin()。它適用於度和弧度的某些值,但不適用於其他像180和pi的其他值。現在的一些代碼:
private void buttonSin_Click(object sender, EventArgs e)
{
if (radioDeg.Checked)
{
firstOperand = Math.PI/180*firstOperand;
}
firstOperand = Math.Sin(firstOperand);
secondOperand = 0;
displayScreen.Text = firstOperand.ToString();
clickCount = 0;
operationCount++;
}
firstOperand爲雙並(與第二操作數一起)用於將舉行後續計算。我認爲代碼的其他部分是不言自明的,但如果有必要,我會很樂意詳細說明。 Math.Sin(Math.PI)= 1.224 ...而不是0,因爲它應該。但Math.Sin(Math.PI/4)= 0.707 ...正如所料。此外,這隻有當pi生成爲Math.PI時纔是如此。如果輸入手動爲3.14159,Math.Sin()= 2.65 ...如果輸入爲3.1415926我得到Math.Sin()= 5.35 ...任何人都可以指出爲什麼?
Math.Log()問題:
這部分工作幾乎是完美的。唯一的錯誤發生在連續應用該功能時。看看代碼:
private void buttonLn_Click(object sender, EventArgs e)
{
firstOperand = Math.Log(firstOperand);
secondOperand = 0;
displayScreen.Text = firstOperand.ToString();
clickCount = 0;
operationCount++;
}
Math.Log(Math.E)以= 1作爲它應該,但是當LN按鈕後馬上打,我得到的1.776的值...請注意,如果手動輸入2.718,然後ln按鈕被連續擊中兩次,我得到-.0001 ...這更接近實際的答案0.
對不起,如果這些應該是單獨的職位,但我認爲這兩個問題都可能與常量Math.PI和Math.E的處理方式有關。有什麼想法嗎?
顯然Math.Sin不可能返回大於1的值;那應該是你的第一個線索,說明你的結尾有什麼不對,而不是Math.Sin的結尾。 –
雖然,有趣的是,'Math.Sin(1E50)'返回1E50 ;-) –
@MatthewStrawbridge,這是完全按照文件工作:[「範圍從約-9223372036854775295到約9223372036854775295的可接受值。對於超出此範圍的值,Sin方法返回一個未更改,而不是拋出異常。「](http://msdn.microsoft.com/en-us/library/system.math.sin.aspx) – svick