शून्य, डबल परिशुद्धता मूल्य कि π/2 की एक सटीक एकाधिक के सबसे करीब आता है 6381956970095103 * 2^797 है के अलावा:
लेकिन अगर आप एक डेल्टा का उपयोग कर सुरक्षित हैं प्रभाग प्रदर्शन से पहले की तुलना,
(an odd integer) * π/2 + 2.983942503748063...e−19
इस प्रकार, के लिए सभी डबल परिशुद्धता मूल्यों एक्स, हम बाध्य है: है, जो के बराबर है
|cos(x)| >= cos(2.983942503748063...e−19)
ध्यान दें कि यह गणितीय रूप से सटीक मान पर बाध्य है, लाइब्रेरी फ़ंक्शन cos
द्वारा दिए गए मान पर नहीं। एक अच्छी गुणवत्ता वाले गणित पुस्तकालय वाले मंच पर, यह बाध्य पर्याप्त रूप से अच्छा है कि हम कह सकते हैं कि cos(x)
किसी भी डबल-परिशुद्धता x
के लिए शून्य नहीं है। वास्तव में, यह पता चला है कि यह डबल करने के लिए अद्वितीय नहीं है; यह संपत्ति सभी आईईईई -754 मूल प्रकारों के लिए है, यदि cos
ईमानदारी से गोलाकार है।
हालांकि, यह कहना नहीं है कि यह कभी ऐसे प्लेटफॉर्म पर नहीं हो सकता है जिसमें त्रिकोणमितीय तर्क में कमी का शानदार प्रदर्शन हो।
इससे भी अधिक महत्वपूर्ण बात, यह ध्यान रखें कि अपने उदाहरण में y
अनंत बिना cos(a)
जा रहा है शून्य हो सकता है महत्वपूर्ण है:
#include <math.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
double a = 0x1.6ac5b262ca1ffp+849;
double h = 0x1.0p1022;
printf("cos(a) = %g\n", cos(a));
printf("h/cos(a) = %g\n", h/cos(a));
return 0;
}
संकलन और चलाएँ:
scanon$ clang example.c && ./a.out
cos(a) = -4.68717e-19
h/cos(a) = -inf
स्रोत
2011-07-31 21:03:20
कभी कभी प्रणाली यह मजबूर हो सकता है शून्य जब 'ए' aprox है। 'पीआई/2' के बराबर। – ja72