gpt4 book ai didi

c# - Math.Sin、Math.Cos 和 Math.Tan 精度以及正确显示它们的方法

转载 作者:行者123 更新时间:2023-11-30 15:03:01 31 4
gpt4 key购买 nike

我正在用 C# 编写一个计算器。

textBoxResult 是我显示数字的文本框

recount 是一个以度为单位的角度并以弧度为单位返回的函数

我从 texBoxInput

获取角度
public double recount(int number)
{
double wyjscie = 0.0;
double Number = number;
wyjscie = Number * (Math.PI / 180);
return wyjscie;
}

//function which is called out when user presses the button:
textBoxResult.Text = Math.Round(Math.Tan(recount(Convert.ToInt32(texBoxInput.Text))),2).ToString();

如您所见,我在使用 Math.Tan 时试图四舍五入这个数字,但 Math.Tan 仍然告诉我 90 度的 tan 是 1,63317787283838E +16。

我一直在努力寻找答案,但没有成功。我不知道如何显示正确的结果。

最佳答案

基本上,这看起来像是 Math.Tan 的预期行为。我不太了解其他语言,所以我不确定这对于 float 学是正常的还是特定于 C# 实现。 (注意:之后,我发现谷歌的在线计算器返回相同的结果,表明它对浮点触发函数的预期行为,可能与 pi 是无理数这一事实以及 double 据类型的限制有关)

但是,从这个结果向后计算,我看到 Math.Atan(//your result);Math.Atan(double.PositiveInfinity) 都返回 90度,表明这是预期的?

这是我的测试:

var deg = 90.0;
var rads = deg * (Math.PI / 180);
var result = Math.Tan(rads);

if (Double.IsInfinity(result))
Console.WriteLine("Tan of 90 degrees is Infinity");
else if (Double.IsNaN(result))
Console.WriteLine("Tan of 90 degrees is Undefined");
else
Console.WriteLine("Tan of 90 degrees is {0}", result);

Console.WriteLine("Arc Tan of {0} is {1} degrees", double.PositiveInfinity, Math.Atan(double.PositiveInfinity) * 180 / Math.PI);
Console.WriteLine("Arc Tan of {0} is {1} degrees", result, Math.Atan(result) * 180 / Math.PI);

输出为:

Tan of 90 degrees is 1.63317787283838E+16
Arc Tan of Infinity is 90 degrees
Arc Tan of 1.63317787283838E+16 is 90 degrees

所以我的猜测是,除非有人可以进来并提供解决方法,否则您可能必须将其作为边缘情况进行编程才能获得正确的结果。

任何三角函数的“正确结果”都将限于 double 的精度,即 15 位有效数字,因此如果您需要更多,则需要找到一个支持更精确数学的库。

由于 Math.Tan(Math.PI/2) 似乎提供了不受欢迎的响应,您可以这样做:

public double ComputeTangent(double angleRads)
{
if (angleRads == Math.PI/2)
return double.PositiveInfinity
if (angleRads == - Math.PI/2)
return double.NegativeInfinity

return Math.Tan(angleRads);
}

关于c# - Math.Sin、Math.Cos 和 Math.Tan 精度以及正确显示它们的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12108651/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com