Ich habe die folgende Methode, um zwei 32-Bit-Zahlen im Fixpunkt 19.13
Format zu multiplizieren. Aber ich denke, es gibt ein Problem mit dieser Methode:Festkomma-Multiplikation von negativen Zahlen
1.5f
ist auf 2.0f
aufgerundet, während -1.5f
auf -1.0f
aufgerundet wird.
Es scheint mir, dass -1.5
auf -2.0f
abgerundet werden sollte.
Erstens macht die aktuelle Rundung Sinn, und wenn nicht, wie kann ich sie ändern , um konsistenter zu sein?
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);
}