我创建的一个计算器程序几乎完美的工作,除了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