为什么C#在控制台中给出不正确的结果?
我需要完成一项任务——在C#中实现公式的解决方案,但控制台中的结果不是我需要的。结果应为-11.84361,但控制台输出15.1676628055975。代码怎么了?要修复什么为什么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(); }
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