2011-06-05 8 views
5

मैंमैं php cos फ़ंक्शन को सही मान कैसे वापस कर सकता हूं?

$x = cos(deg2rad($angle)); 

की कोशिश की है, लेकिन यह 6.12323399574E -17 लौटाता है जब कोण 0. के बजाय मैंने पढ़ा है कि यह एक चल बिन्दु समस्या यह है 90 डिग्री है, लेकिन वहाँ एक समाधान है?

उत्तर

10

6.1E-17 लगभग शून्य वैसे भी शून्य है [*]। यदि आपको वास्तव में परिणाम की तुलना शून्य से करने की आवश्यकता है, तो फ़्लोटिंग पॉइंट गणित में आपको यह जांचना चाहिए कि यह वांछित मान की एक निश्चित सहनशीलता के भीतर है, क्योंकि अधिकांश संख्याओं का सही ढंग से प्रतिनिधित्व नहीं किया जा सकता है।

$x = cos(deg2rad($angle)); 
$is_zero = (abs($x) < 1e-10); 

सच पूछिये तो, जाहिर है, शून्य वास्तव में एक संख्या है कि चल बिन्दु में सही ढंग से प्रदर्शित किया जा सकता है। असली समस्या यह है कि pi/2.0 नहीं हो सकता है, इसलिए आपके cos फ़ंक्शन में इनपुट "सही" नहीं है।

[*] संदर्भ में है कि, 1 ए.यू. (पृथ्वी पर सूर्य से औसत दूरी) के अनुपात के रूप में लिया कहें यह 0.0092 मिलीमीटर, या tenth of the average width एक के बारे में एक मानव बाल की के बराबर है ..

4

6.12323399574E-17 एक बेहद छोटा फ़्लोटिंग पॉइंट नंबर है (दशमलव बिंदु के बाद 17 शून्य बाद 6), लगभग 0 से अलग नहीं है। यदि आप फ्लोटिंग पॉइंट्स (जैसे किसी भी कोसाइन फ़ंक्शन को) के साथ काम कर रहे हैं, तो आप इस तरह के मुद्दों से बच नहीं सकते हैं। यदि आपको फ़्लोटिंग पॉइंट नंबर की तुलना शून्य से करने की आवश्यकता है, तो आपको इसे त्रुटि बार के साथ करना होगा (यानी शून्य के चारों ओर मानों की एक निश्चित सीमा के भीतर यह संख्या है), पूर्ण तुलना नहीं, यहां तक ​​कि कोसाइन की तुलना में सरल कार्यों के साथ भी। यदि आपको केवल परिणाम के साथ कुछ गणित करने की आवश्यकता है (इसे जोड़ें, इसे गुणा करें, जो भी हो), यह लगभग शून्य की तरह व्यवहार करेगा ताकि आपको चिंता करने की आवश्यकता न हो।

1

इस

$x = round(cos(deg2rad($angle)), 3); 
प्रयास करें
संबंधित मुद्दे

 संबंधित मुद्दे