如何在C#中求平方根

3

我有一个公式,想要用C#编写。如果有错误,请指出…… Formula Picture
我的代码写得和这个公式一样:

Xopt = 293.94 * Math.Sqrt(HDD * Cfuel * PWF * K / H4 * Cy * n) - K * Rwt;

很遗憾,这样做的结果与公式不同。我该怎么办?


2
应该是 Xopt = 293.94 * Math.Sqrt((HDD * Cfuel * PWF * K) / (H4 * Cy * n)) - K * Rwt - Sweeper
2
我真的不明白为什么会有人投票关闭这个问题。这是一个非常简单明了的带有代码的问题。它没有任何混淆的地方,也没有缺少任何信息。 - Joe Phillips
2
@JoePhillips 我猜是用图像代替公式(不是我投的反对票或关闭投票)。这是一种情况,我表示同情。如果能够轻松地将公式显示为文本,则代码也将正确,而且不会有任何问题。 - Joel Coehoorn
2个回答

4

你忘记在分母周围加上一组括号。没有括号,根号内的所有内容都将从左到右计算。

Xopt = 293.94 * Math.Sqrt(HDD * Cfuel * PWF * K / (H4 * Cy * n)) - (K * Rwt);

同时也是关于最后一个因素的一组数据。感谢Joel。

1
根据这张图片,我敢打赌最后的减法运算也需要父级元素。 - Joel Coehoorn
@JoelCoehoorn 没错。发现得好。我根据图像将所有内容解析为一个变量,而不是根据代码片段将其解析为两个变量。已修复。 - RedPeasant

4

它需要更多的括号或将计算分解成多个语句(或两者兼备)。否则,平方根表达式只能通过H4进行除法运算,然后将该结果乘以Cyn

var numerator = HDD * Cfuel * PWF * K; 
var denominator = H4 * Cy * n;
Xopt = 293.94 * Math.Sqrt(numerator / denominator) - (k * Rwt); 

如果你足够了解公式的原理,能够为分子和分母赋予有意义的名称,那就更好了。


1
我喜欢看到它们得到这样的适当名称。我所知道的唯一缺点是它会导致更多的分配,这可能会引起一些人的抱怨。 - Joe Phillips
3
我不确定那件事。 “额外”的变量可能是以下情况之一:被编译器优化掉了,仍然保存在该方法的堆栈帧中,或者更大的表达式也需要其自己的临时值。看到一个IL分解会很有趣。 - Joel Coehoorn
这个差异比较工具很糟糕,但你可以在这里获得原始比较结果。虽然我无法确定有多少差异,但似乎确实存在一些:https://www.diffchecker.com/4AHSMF1C - Joe Phillips
但是你说得对,没有“分配”(当时我不明白自己在说什么) - Joe Phillips

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接