PQ公式Java程序计算结果异常,求问题排查帮助
PQ公式计算结果不符问题排查
问题描述
使用PQ公式 $x₁,₂ = -p/2 ± √(p²/4 - q)$ 编写Java程序时,运行正常但输出结果与预期不符:
- 测试输入:p=12、q=-12
- 程序输出:x₁=9.0,x₂=-21.0
- 正确结果:x₁≈0.92820323027551,x₂≈-12.928203230276
手动计算或用计算器能得到正确结果,调整公式后错误依旧。
原代码
public class PQ { public static void main(String[] args) { if (args.length != 2) { System.out.println("ERROR: Bitte genau zwei Argumente angeben"); return; } double p = Double.parseDouble(args[0]); double q = Double.parseDouble(args[1]); double teil1 = -(p / 2); double teil2 = (Math.sqrt(p * p) / 4 - q); double teil3 = (p * p / 4 - q); double Null1 = teil1 + teil2; double Null2 = teil1 - teil2; if (teil3 < 0) { System.out.println("Es gibt 0 Nullstellen."); } if (Null1 > Null2) { System.out.println(Null2); System.out.println(Null1); System.out.println("Es gibt 2 Nullstellen."); } else if (Null1 < Null2) { System.out.println(Null1); System.out.println(Null2); System.out.println("Es gibt 2 Nullstellen."); return; } if (Null1 == Null2) { System.out.println(Null1); System.out.println("Es gibt 1 Nullstelle."); } } }
错误原因
核心问题出在teil2的计算逻辑:
原代码中teil2 = (Math.sqrt(p * p) / 4 - q),完全偏离了PQ公式的根号部分要求。公式中根号内的整体是$(p²/4 - q)$,需要先计算这个值再开平方,而非先对p²开平方再除以4减q。
修正方案
将teil2的计算行修改为:
double teil2 = Math.sqrt(p * p / 4 - q);
修正后,程序会正确计算根号部分,代入测试输入p=12、q=-12时,就能得到符合预期的结果。
内容的提问来源于stack exchange,提问作者Bennyx
相关产品推荐
相关产品推荐

