C# 应该很简单,但不知何故它';不是
这是问题的一种特殊情况当numen/domin=1时,问题应该产生0吗 domin输出显示为6,但结果显示为NaN 当numen=4,domin=sqrt为4的2次方时,结果为4/4,所有正整数(如9,16,25,36)的正确答案相同 但如果我放6,它会给NaN 如果我放7,它显示1.490116E-08 如果我放8,它显示2.107342E-08 我知道你能说什么 如果(努曼==多明) 结果=0 但我真的很想知道为什么这不能正常工作C# 应该很简单,但不知何故它';不是,c#,C#,这是问题的一种特殊情况当numen/domin=1时,问题应该产生0吗 domin输出显示为6,但结果显示为NaN 当numen=4,domin=sqrt为4的2次方时,结果为4/4,所有正整数(如9,16,25,36)的正确答案相同 但如果我放6,它会给NaN 如果我放7,它显示1.490116E-08 如果我放8,它显示2.107342E-08 我知道你能说什么 如果(努曼==多明) 结果=0 但我真的很想知道为什么这不能正常工作 using System; using System.Col
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ps
{
class Program
{
static void Main(string[] args)
{
double numen = 6;
double domin = Math.Pow(Math.Sqrt(6), 2);
Console.WriteLine(domin);
double result = Math.Acos(numen /(domin));
Console.WriteLine(result);
}
}
}
这里是基础数学
sinus
和cosinus
数学值的值在-1和1之间变化,因此逆函数的域,例如arcus sinus
和arcus cosinus
在-1
和1
之间
在您的示例中,
numen/domin
由于Math
lib中的舍入错误而变成1.0000000000000002
。因此,当您调用Math.Acos
时,它是arcus cosinus
domin
在函数域之外,因此返回的值是NaN
ReadSqrt(6)
不是整数。因此,Math.Pow(Math.Sqrt(6,2))
将给出近似值,而不是1
(在这种情况下,5.999999999999
)。然后,6/5。999999999999
将略高于1。使用decimal
代替感谢您的帮助!!我理解为什么它不起作用“1.0000000000000002由于数学库中的舍入错误”我知道arcos的范围只是不知道数学库有舍入错误没有期望它是诚实的我的问题不在附近当它是NaN时它在附近为什么它是NaN@user13674310所以,原因是舍入误差,这导致值超出了余弦弧的域,而余弦弧又导致了NaN
值。如果我的答案对你有帮助,你应该接受它(左边绿色复选标记)。