Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么C#在控制台中给出不正确的结果?_C#_Console Application - Fatal编程技术网

为什么C#在控制台中给出不正确的结果?

为什么C#在控制台中给出不正确的结果?,c#,console-application,C#,Console Application,我需要完成一项任务——在C#中实现公式的解决方案,但控制台中的结果不是我需要的。结果应为-11.84361,但控制台输出15.1676628055975。代码怎么了?要修复什么 namespace Exercise10 { class Program { static void Main() { Number number1 = new Number(); number1.Z(); Console.ReadKey(); }

我需要完成一项任务——在C#中实现公式的解决方案,但控制台中的结果不是我需要的。结果应为-11.84361,但控制台输出15.1676628055975。代码怎么了?要修复什么

namespace Exercise10
{
class Program
{
    static void Main()
    {
        Number number1 = new Number();
        number1.Z();
        Console.ReadKey();
    }
}
class Number
{
    double x, y, znamenatel, znamenatelh, virazhenie;
    public void Z()
    {
        M:
        Console.Write("Введите число x: ");
        x = double.Parse(Console.ReadLine());
        Console.Write("Введите число y: ");
        y = double.Parse(Console.ReadLine());
        znamenatelh = Math.Pow(Math.E, 2) - Math.Pow(x + y, 3 / 4);
        if (znamenatelh < 0)
        {
            Console.WriteLine("Нельзя извлечь корень из отрицательного числа. Введите числа заново.");
            goto M;
        }
        znamenatel = Math.Pow(znamenatelh, 1 / 3);
        if (znamenatel == 0)
        {
            Console.WriteLine("Нельзя делить на нуль. Введите числа заново.");
            goto M;
        }
        void Z_()
        {
            virazhenie = (x / znamenatel) + Math.Pow(Math.Pow(x - y, Math.Sin(x * y)) / znamenatel, 7 / 3);
            Console.Write($"Z({x}, {y}) = {virazhenie}");
        }
        Z_();
    }
}
} // <---- for some reason leaves the block
名称空间练习10
{
班级计划
{
静态void Main()
{
编号1=新编号();
编号1.Z();
Console.ReadKey();
}
}
班号
{
双x,y,znamenatel,znamenatelh,virazhenie;
公共空间Z()
{
M:
控制台。写入(“bчччччччx:”;
x=double.Parse(Console.ReadLine());
控制台。写入(“bчччччy:”;
y=double.Parse(Console.ReadLine());
znamenatelh=Math.Pow(Math.E,2)-Math.Pow(x+y,3/4);
if(znamenatelh<0)
{
控制台写入线(“ззззззззззззз.зззззз”);
goto M;
}
znamenatel=数学功率(znamenatelh,1/3);
如果(znamenatel==0)
{
控制台写入线(“зззааааааа。газааааааааа;
goto M;
}
void Z_uz()
{
virazhenie=(x/znamenatel)+Math.Pow(Math.Pow(x-y,Math.Sin(x*y))/znamenatel,7/3);
Write($“Z({x},{y})={virazhenie}”);
}
Z_();
}
}
}当你用整数除以整数时,结果也是整数;就你而言

3 / 4 == 0
1 / 3 == 0
7 / 3 == 2
为了获得浮点结果(
0.75
0.33333
2.33333
),您应该对浮点值进行除法:
3.0/4.0
1.0/3.0
7.0/3.0

// znamenatel' is Russian for "denominator"
znamenatelh = Math.Pow(Math.E, 2) - Math.Pow(x + y, 3.0 / 4.0);

...

// znamenatel' is Russian for "denominator" 
znamenatel = Math.Pow(znamenatelh, 1.0 / 3.0);

...

// virazhenie is Russian for "formula" or "expression" 
virazhenie = (x / znamenatel) + Math.Pow(Math.Pow(x - y, Math.Sin(x * y)) / znamenatel, 7.0 / 3.0);
旁注:
转到M是邪恶的,转身

构建成循环,例如

编辑:让我们提取计算:

private static double Compute(double x, double y) {
  if (x < y)
    return double.NaN;

  double denominator = Math.Exp(2) - Math.Pow(x + y, 3.0 / 4.0);

  if (denominator == 0)
    return x < 0                ? double.NegativeInfinity : 
           (x == 0) || (x == y) ? double.NaN : 
                                  double.PositiveInfinity;

  denominator = Math.Pow(Math.Abs(denominator), 1.0 / 3.0) * Math.Sign(denominator);

  double result = x / denominator;

  double fraction = Math.Pow(x - y, Math.Sin(x * y)) / denominator;

  result += Math.Pow(Math.Abs(fraction), 7.0 / 3.0) * Math.Sign(fraction);

  return result;
}
演示:

Console.Write(Compute(15, 5));
-11.8436193845787
结果:

Console.Write(Compute(15, 5));
-11.8436193845787

3/4==0
-整数除法;将其设置为
3.0/4.0
,以获得
0.75
;与
1/3
7/3
相同,它们应该是
1.0/3.0
7.0/3.0
,不幸的是,它现在显示在条件中指定的错误消息,并返回到数字输入。对于相同的x和y.@СаааСаааСааааСаааааааа:请提供相关的
x
y
(例如,
x=1
y=2
)以及测试路径的预期结果。在x=1和y=2处的控制台给出“Z(1,2)=作为结果。有了这些值,计算器就不会给出近似值,它只会缩写表达式。@МаааааааааааааСааааааСааааааа(
-0.95968+0.28111i
正如倍频程所说)我在计算器中输入了指数值,而不是任务中需要的自然对数(我混淆了Math.E和计算器中的E符号,事实证明,这意味着指数)。
-11.8436193845787