簡體   English   中英

二次方程誤差

[英]The quadratic equation errors

不能完全確定如何使用此網站,因此,如果問題過於模糊,我深表歉意。

我應該使用二次方程式求根,但是每當我輸入a,b和c的變量時,它都會返回錯誤的答案。 我想知道代碼中的問題是什么。

import java.util.Scanner; 
import static java.lang.System.*;
import static java.lang.Math.*;

public class Quadratic
{
 private int a, b, c;
 private double rootOne;
 private double rootTwo;

 public Quadratic()
 {
   setEquation(0,0,0);
   rootOne=0;
   rootTwo=0;
 }

 public Quadratic(int quadA, int quadB, int quadC)
 {
   setEquation(quadA, quadB, quadC);
   rootOne=0;
   rootTwo=0;
 }

 public void setEquation(int quadA, int quadB, int quadC)
 {
   a = quadA;
   b = quadB;
   c = quadC;
  }

 public void calcRoots( )
 {
   rootOne = (-b + (Math.sqrt((Math.pow(b,2)) - ((4 * a * c))))/(2*a));
   rootTwo = (-b - (Math.sqrt((Math.pow(b,2)) - ((4 * a * c))))/(2*a));
 }

 public void print( )
 {
   System.out.println("rootone :: " +rootOne);
   System.out.println("roottwo :: " +rootTwo);
 }
}

括號放在錯誤的位置:

(-b + (Math.sqrt((Math.pow(b,2)) - ((4 * a * c))))/(2*a))

除去多余的括號,您的代碼正在執行:

-b + Math.sqrt(Math.pow(b,2) - 4 * a * c) / (2 * a)

所以-b不會被2a ,您可能想要:

(-b + Math.sqrt(Math.pow(b, 2) - 4 * a * c)) / (2 * a)

而且,正如Manos所提到的, int對於這種類型不是一個很好的選擇。

在某些情況下,逐步進行操作會有益於理解並可能提高性能:

double t1 = Math.sqrt(Math.pow(b, 2) - 4 * a * c);
double t2 = 2 * a;
rootOne = (-b + t1) / t2;
rootTwo = (-b - t1) / t2;

這是編程中的一種常見樣式,可以避免讓代碼多次執行相同的操作,尤其是冪和平方根之類的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM