Conversions from int to unsigned int to ensure correct execution of int_min at line...
[openjpeg.git] / libopenjpeg / fix.c
index 5d7f2b67669e2c717ba146a119f1caf00a8ed93b..12ef6a7e66cccc0fb1c68fa0bf9186ed429bfe69 100644 (file)
@@ -25,6 +25,7 @@
  */
 
 #include "fix.h"
+#include <math.h>   //Add Antonin : multbug1
 
 #ifdef WIN32
 #define int64 __int64
 /*
  * Multiply two fixed-precision rational numbers.
  */
+
+//int fix_mul(int a, int b)
+//{
+//  return (int) ((int64) a * (int64) b >> 13);
+//}
+
+
+//Mod Antonin : multbug1
+/*
 int fix_mul(int a, int b)
 {
-    return (int) ((int64) a * (int64) b >> 13);
+  double tmp= (double) ((int64) a * (int64) b);
+  int64 v = (int64) ((fabs(tmp/8192.0)>=floor(fabs(tmp/8192.0))+0.5)?fabs(tmp/8192.0)+1.0:fabs(tmp/8192.0));
+  v = (tmp<0)?-v:v;
+  return (int) v;
 }
+*/
+//doM
+
+int fix_mul(int a, int b)   // Luke Lee optimized : 11/16/2004
+{
+    int64 temp = (int64) a * (int64) b >> 12;
+    return (int) ((temp >> 1) + (temp & 1)) ;
+}
+