के खिलाफ एक डबल की तुलना में मैं जावा में नया हूं और मैं एक क्यूबिकल समीकरण की जड़ें खोजने के लिए एल्गोरिदम लागू करने की कोशिश कर रहा हूं। समस्या तब उत्पन्न होती है जब मैं भेदभाव की गणना करता हूं और यह जांचने की कोशिश करता हूं कि यह शून्य के सापेक्ष कहां गिरता है।शून्य
आप इसे चलाते हैं और संख्या "1 -5 8 -4" दर्ज करते हैं, उत्पादन इस प्रकार है:
1 -5 8 -4
p=-0.333333, q=0.074074
disc1=0.001372, disc2=-0.001372
discriminant=0.000000000000000
Discriminant is greater than zero.
मैं जानता हूँ कि समस्या पैदा होती है क्योंकि युगल के साथ गणना सटीक नहीं हैं। आम तौर पर भेदभाव 0 होना चाहिए, लेकिन यह 0.000000000000000जैसा कुछ होता है।
मेरा सवाल है, इससे बचने का सबसे अच्छा तरीका क्या है? क्या मुझे यह जांचना चाहिए कि संख्या शून्य के एक ईपीएसलॉन पड़ोस के बीच होती है या नहीं? या क्या एक बेहतर और अधिक सटीक तरीका है?
आपके उत्तरों के लिए अग्रिम धन्यवाद।
import java.util.Scanner;
class Cubical {
public static void main(String[] args) {
// Declare the variables.
double a, b, c, d, p, q, gamma, discriminant;
Scanner userInput = new Scanner(System.in);
a = userInput.nextDouble();
b = userInput.nextDouble();
c = userInput.nextDouble();
d = userInput.nextDouble();
// Calculate p and q.
p = (3*a*c - b*b)/(3*a*a);
q = (2*b*b*b)/(27*a*a*a) - (b*c)/(3*a*a) + d/a;
// Calculate the discriminant.
discriminant = (q/2)*(q/2) + (p/3)*(p/3)*(p/3);
// Just to see the values.
System.out.printf("p=%f, q=%f\ndisc1=%f, disc2=%f\ndiscriminant=%.20f\n", p, q, (q/2)*(q/2), (p/3)*(p/3)*(p/3), (q/2)*(q/2) + (p/3)*(p/3)*(p/3));
if (discriminant > 0) {
System.out.println("Discriminant is greater than zero.");
}
if (discriminant == 0) {
System.out.println("Discriminant is equal to zero.");
}
if (discriminant < 0) {
System.out.println("Discriminant is less than zero.");
}
}
}
@hattenn: ओपी को, पीटर का दूसरा सुझाव जाने का रास्ता है। –
ईआरआरओआर के लिए कौन सा मूल्य बेहतर है? –
@LunaKong त्रुटि संदर्भ पर निर्भर करता है। यह 1e-12 तक 1e-3 तक हो सकता है या इसे कुछ और होने की आवश्यकता हो सकती है। –