Переглянути джерело

LibC: Make div() and ldiv() behave according to the C standard

Andreas Kling 5 роки тому
батько
коміт
0b59c0d0dc
1 змінених файлів з 10 додано та 0 видалено
  1. 10 0
      Libraries/LibC/stdlib.cpp

+ 10 - 0
Libraries/LibC/stdlib.cpp

@@ -348,6 +348,11 @@ div_t div(int numerator, int denominator)
     div_t result;
     div_t result;
     result.quot = numerator / denominator;
     result.quot = numerator / denominator;
     result.rem = numerator % denominator;
     result.rem = numerator % denominator;
+
+    if (numerator >= 0 && result.rem < 0) {
+        result.quot++;
+        result.rem -= denominator;
+    }
     return result;
     return result;
 }
 }
 
 
@@ -356,6 +361,11 @@ ldiv_t ldiv(long numerator, long denominator)
     ldiv_t result;
     ldiv_t result;
     result.quot = numerator / denominator;
     result.quot = numerator / denominator;
     result.rem = numerator % denominator;
     result.rem = numerator % denominator;
+
+    if (numerator >= 0 && result.rem < 0) {
+        result.quot++;
+        result.rem -= denominator;
+    }
     return result;
     return result;
 }
 }