Browse Source

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

Andreas Kling 5 năm trước cách đây
mục cha
commit
0b59c0d0dc
1 tập tin đã thay đổi với 10 bổ sung0 xóa
  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;
     result.quot = numerator / denominator;
     result.rem = numerator % denominator;
+
+    if (numerator >= 0 && result.rem < 0) {
+        result.quot++;
+        result.rem -= denominator;
+    }
     return result;
 }
 
@@ -356,6 +361,11 @@ ldiv_t ldiv(long numerator, long denominator)
     ldiv_t result;
     result.quot = numerator / denominator;
     result.rem = numerator % denominator;
+
+    if (numerator >= 0 && result.rem < 0) {
+        result.quot++;
+        result.rem -= denominator;
+    }
     return result;
 }