मेरे पास निश्चित बिंदु 19.13
प्रारूप में दो 32 बिट संख्याओं को गुणा करने के लिए निम्न विधि है। लेकिन मुझे लगता है कि इस विधि के साथ एक समस्या है:नकारात्मक संख्याओं का फिक्स्ड पॉइंट गुणा
1.5f
, 2.0f
तक बढ़ाना है, जबकि -1.5f
-1.0f
तक बढ़ाना है।
ऐसा लगता है कि -1.5
-2.0f
पर गोल किया जाना चाहिए।
सबसे पहले, वर्तमान राउंडिंग समझ में आता है, और यदि नहीं, तो मैं इसे को और अधिक सुसंगत बनाने के लिए कैसे बदल सकता हूं?
static OPJ_INT32 opj_int_fix_mul(OPJ_INT32 a, OPJ_INT32 b) {
OPJ_INT64 temp = (OPJ_INT64) a * (OPJ_INT64) b ;
temp += 4096;
assert((temp >> 13) <= (OPJ_INT64)0x7FFFFFFF);
assert((temp >> 13) >= (-(OPJ_INT64)0x7FFFFFFF - (OPJ_INT64)1));
return (OPJ_INT32) (temp >> 13);
}