विंडोज 7 पीसी पर जावा का उपयोग करना (यकीन नहीं है कि यह मायने रखता है) और Math.cos() को उन मानों पर कॉल करना जो 0 (जैसे pi/2) को वापस करना चाहिए छोटे मान लौटाते हैं, लेकिन छोटे मान, जब तक कि मैं गलतफहमी नहीं कर रहा हूं, शून्य से 1 ulp से अधिक हैं।जावा Math.cos() विधि 0 वापस नहीं आती है 0 अपेक्षित
Math.cos(Math.PI/2) = 6.123233995736766E-17
Math.ulp(Math.cos(Math.PI/2)) = 1.232595164407831E-32
क्या यह वास्तव में 1 उल के भीतर है और मैं बस उलझन में हूं? और क्या यह मामूली गलतता को हल करने के लिए एक स्वीकार्य रैपर विधि होगी?
public static double cos(double a){
double temp = Math.abs(a % Math.PI);
if(temp == Math.PI/2)
return 0;
return Math.cos(a);
}
@ dimo414 : सबसे पहले "यह निश्चित नहीं है कि यह महत्वपूर्ण है" पर एक टिप्पणी। अधिकांश मठ ऑपरेशन का व्यवहार ठीक से परिभाषित नहीं किया जाता है ताकि ओएस और सीपीयू मायने रख सकें। यदि आप गणित ऑपरेशन चाहते हैं जिसका व्यवहार सख्ती से परिभाषित किया गया है (जो तर्कसंगत रूप से समस्या निवारण के लिए आसान है) तो आप स्ट्रिक्टैथ का उपयोग करना चाहते हैं, मठ नहीं (निश्चित रूप से सख्त मैथ ऑपरेशंस शायद धीमे हो जाएंगे क्योंकि वे सीपीयू में उपलब्ध हार्डवेयर त्वरित ऑपरेशन का उपयोग नहीं कर सकते हैं)। – SyntaxT3rr0r
Math.cos() StrictMath.cos() के लिए सिर्फ एक रैपर है, जो स्वयं ही एक मूल कार्य है। – dimo414