2010-07-30 11 views
8

आप जानते हैं कि यह बगजर है-सब जब आपका कंप्यूटर सही नहीं हो सकता है!मेरा कंप्यूटर बेवकूफ हो गया। 0 + 20 = 1 9.921875 !!! मेरी मदद करो!

मैं थोड़ी सी भी विचार है क्यों यह हो रहा है नहीं:

_root.attachMovie("clippy","aClip",_root.getNextHighestDepth()); 

trace("alpha 1 = "+aClip._alpha); 
aClip._alpha = 0; 
trace("alpha 2 = "+aClip._alpha); 
aClip._alpha += 20; 
trace("alpha 3 = "+aClip._alpha); 
aClip._alpha = 20; 
trace("alpha 4 = "+aClip._alpha);

आउटपुट है:

alpha 1 = 100 
alpha 2 = 0 
alpha 3 = 19.921875 
alpha 4 = 19.921875

19,921875 20 होना चाहिए! :(

मैं रोना लिए जा रहा हूँ। AClip._alpha करता है मेरी प्रोसेसर कैंसर है? अल्जाइमर? किसने कहा कंप्यूटर गलती नहीं करते हैं?

पी एस मैं भी इस्तेमाल किया aClip._alpha = गणित.गोल () लेकिन ट्रेस वही था!

+1

शायद इसे फ़्लोटिंग पॉइंट्स के साथ कुछ करना है, लेकिन मैंने कभी भी क्रियालेख में डब नहीं किया है। शायद int करने के लिए कास्ट? – Wrikken

उत्तर

23

_alpha मूल्यों एक बाइट के रूप में जमा हो जाती है (मैं 8 बिट कहना चाहिए - 0 से 255 के लिए एक पूर्णांक मान) आप एक _alpha मूल्य सेट करते हैं

, आप एक प्रतिशत का उपयोग करें। जब आप इसे पुनर्प्राप्त करते हैं, तो यह प्रतिशत का सटीक दशमलव प्रतिनिधित्व प्राप्त करता है।

aClip._alpha = 20; 

256 की 20%, 51.2 है, क्योंकि यह एक पूर्णांक के रूप में जमा है, यह 51 को फिदा हो जाएगी।

फिर,

51/256 * 100 कैसे फ्लैश इसे वापस करने के लिए आप जो 19.921875 है देता है, है।

+3

बहुत अच्छी तरह से समझाया। मुझे एक्शनस्क्रिप्ट में कोई अनुभव नहीं है और यहां तक ​​कि मैं चला गया "aaahh हाँ, जो समझ में आता है! मुझे मिल गया!" – rownage

+0

धन्यवाद। अब मुझे समझ आई। – navand

+3

अच्छी व्याख्या।लेकिन फिर भी, आईएमओ मैक्रोमेडिया/एडोबस भाग पर कुछ हद तक खराब डिजाइन का एक खाता है, क्योंकि 1) यह गेटर/सेटर सिद्धांत के महत्वपूर्ण हिस्सों को नजरअंदाज करता है - मेरा मतलब है कि आप एक चर को 20 तक सेट करते हैं, लेकिन बाद में [email protected]%$^ प्राप्त करें और 2) 'if (_alpha == 20)' जैसे सरल, तार्किक और पठनीय कोड को तोड़ देगा क्योंकि आप कभी भी यह सुनिश्चित नहीं कर सकते कि '_alpha' इसके पूर्ण नियंत्रण के साथ भी बराबर होगा। बेशक 'int (_alpha)' मदद करेगा, लेकिन फिर फिर से इस छोटी गड़बड़ी के शीर्ष पर छेद पैच करता है। हालांकि मैं इस भविष्य को सारणित करने के कारणों को समझता हूं - गति। – amn

0

अगर मुझे सही याद है, तो कुछ अजीब पागल मूल्य के साथ आंतरिक रूप से अल्फा को स्टोर करता है, 0..240 (मुझे नहीं लगता कि यह 255 है)। क्या यह हो सकता है कि यह 20 ले रहा है 20% होने के बाद, और गोल करने के बाद, 1 9.9 2 निकटतम मूल्य है जब इसे वापस प्रतिशत में परिवर्तित कर दिया जाता है?

1

इसे गोलाकार लगता है

-1

अन्य उत्तरों की वैधता के बावजूद, फ़्लोटिंग पॉइंट कार्यान्वयन के ज्ञात और अच्छी तरह से प्रलेखित कलाकृतियों हैं, जिनमें से अन्य, एडोब फ्लैश प्लेयर का उपयोग करता है। निम्नलिखित कोड, उदाहरण के लिए, 1.0010000000000001 का थोडा सा गलत (यदि वहाँ गणित के क्षेत्र में इस तरह के कार्य है) उत्पादन का उत्पादन होगा:

trace(0.1009 + 0.9001); 

यह सब, जैसा कि मैंने कहा, एक आईईईई चल बिन्दु विनिर्देश कार्यान्वयन का उपयोग का हिस्सा है।

0

फ्लैश सीएस 5 में घटक संपत्ति बॉक्स में "फ़्लोटिंग समस्या" भी हुई। एक नई स्थापना के बाद, सीएस 5 घटक गुणों के साथ पागल लगता है, और 20 टाइप करने के बाद 20.00001 देता है।

एडोब एप्लिकेशन मैनेजर को आपके सॉफ़्टवेयर को अपडेट करने के लिए धन्यवाद इस समस्या को ठीक करें।

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