2010-09-11 9 views
6

मुझे सच में नहीं लगता कि यह एक सटीक समस्या है, उत्तर लगभग 0.226 होना चाहिए। यहाँ सटीक कोड है:MATLAB विभाजन ... 2 9/128 वापसी 0 चाहिए?

val = I(i,j) 
bucketSize  
pos = val/bucketSize 

I सिर्फ एक मैट्रिक्स मैं से मान ले रहा हूँ है। MATLAB से आउटपुट यहां दिया गया है:

val = 

    29 

bucketSize = 

    128 

pos = 

    0 

मुझे क्या याद आ रही है?

उत्तर

16

मेरा अनुमान है कि आपका मैट्रिक्स Iimage file से लोड किया गया पिक्सेल डेटा है, जिसमें आमतौर पर unsigned 8-bit integers मान होंगे। जैसा कि पहले ही उल्लेख किया गया है, दोनों पूर्णांक मानों को double precision मान में परिवर्तित करने से यह सुनिश्चित होगा कि MATLAB पूर्णांक विभाजन के बजाय फ़्लोटिंग पॉइंट डिवीजन निष्पादित करता है (जो परिणाम को बंद कर देगा)। ,

सभी बाइनरी आपरेशन जिसमें एक संकार्य पूर्णांक डेटा प्रकार की एक सरणी (सिवाय 64-बिट पूर्णांक) है और अन्य एक अदिश डबल है :

double precision करने के लिए एक मूल्य परिवर्तित अपर्याप्त है MATLAB एलिमेंटेटिक डबल-परिशुद्धता अंकगणितीय का उपयोग करके ऑपरेशन की गणना करता है, और फिर परिणाम को मूल पूर्णांक डेटा प्रकार में परिवर्तित करता है।

यदि आप MATLAB में विभिन्न संख्यात्मक डेटा प्रकारों के बारे में और जानना चाहते हैं, तो आप this documentation देख सकते हैं।

0

ये चर शायद युगल या लंबे समय के बजाय इनट्स हैं। क्या 1/2 वापसी .5? क्या अन्य परिचालन काम करते हैं?

+0

हां। उदाहरण के लिए, सही उत्तर में 2 9/128 परिणाम। मैं इंप्रेशन के तहत था Matlab टाइपलेस था? मैं चर को दोगुना करने के लिए कैसे सेट करूं? – jakev

10

कोशिश:

double(val)/double(bucketSize) 
+0

यह भी काम करता, धन्यवाद – jakev

1

मैं समझ गया, समस्या यह है कि किसी कारण से मेरी मैट्रिक्स निहित uint8 की, नहीं डबल्स है। बस वैल = I (i, j) वैल = डबल (I (i, j) में बदल गया) और सब ठीक है। धन्यवाद।

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