瀏覽代碼

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;
     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;
 }