You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:45:38