java - 为什么这个二次方程不会返回负数?

标签 java math quadratic

这个二次方程不会在我确定要返回的字符串中返回负数。 等式如下:

public class QuadraticEquation  {

    String final0;
    public String calculate(int a, int b, int c) {
        double done1 = ((-1 * b) + Math.sqrt((b * b) - (4 * a * c))) / (2 * a);
        double done2 = ((-1 * b) - Math.sqrt((b * b) - (4 * a * c))) / (2 * a);
        final0 = "x = " + (done1) + " or x = " + (done2);

        return final0;
    }
}

想象一个具有 a、b 和 c 值(如 -3、13 和 -4)的方程。它的返回值将是-0.3(重复)和-4。但这个方程只返回正数,所以在这种情况下它将返回 0.3(重复)和 4。为什么会这样,我能做些什么来解决它?

注意:我确实相信这是一个 Java 错误,而不是数学错误。如果这是一个数学错误,请在评论中告诉我,我会立即将其放在适当的论坛中。谢谢。

最佳答案

public static void main(String[] args) {

    String final0 = calculate(-3, 13, -4);
    System.out.println(final0);

}
public static String calculate(int a, int b, int c) {
    String final0 ;
    int i = -1 * b; // -1 * 13 = -13
    System.out.println(i);

    int j = 4 * a * c; // 4 * -3 * -4  = 4 * 12  = 48
    System.out.println(j);

    double sqrt = Math.sqrt((b * b) - j); // sqrt ((13 * 13) - 48) = sqrt(169 - 48) = sqrt(121) = 11
    System.out.println(sqrt);

    double d = i + sqrt; // -13 + 11 = -2
    System.out.println(d);

    int k = 2 * a; // 2* -3 = -6
    System.out.println(k);

    double done1 = d / k; // -2 / -6 = 1/3 = 0.3333333333
    System.out.println(done1);

    double done2 = (i - sqrt) / k;
    final0 = "x = " + (done1) + " or x = " + (done2);

    return final0;
}

如果您将方法分解为更多局部变量,您将看到 Java 中的数学工作正常。

关于java - 为什么这个二次方程不会返回负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16511584/

相关文章:

java - 帮助使用 Facebook REST API - 使用 HttpClient (Java) 发送通知。

java - 我如何在java中使用mechanize python

java - 如何使用 Java 从 Internet 下载和保存文件?

c - MATLAB 代码输出

java - QuadCurve2D 的中点

java - Firebase 云消息推送通知出现错误

c# - 为什么 -2 % 360 在 C# 中给出 -2 而不是 358

php 剥离标签?

haskell - 二次筛和n次方

java - 有人可以查看我的二次方程代码(在 Java 中)吗?