From afc3077f7a60f9413585b992c14fe488575a4a77 Mon Sep 17 00:00:00 2001 From: "Alexander A. Maly" Date: Thu, 28 Feb 2019 21:00:10 +0300 Subject: [PATCH] Fix div bug Issue https://git.niisi.ru/kumir/kumir2/issues/4 fixed. --- src/kumir2-libs/stdlib/kumirstdlib.hpp | 43 +++++++++++++------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/src/kumir2-libs/stdlib/kumirstdlib.hpp b/src/kumir2-libs/stdlib/kumirstdlib.hpp index 6daca045..4bee9d8a 100644 --- a/src/kumir2-libs/stdlib/kumirstdlib.hpp +++ b/src/kumir2-libs/stdlib/kumirstdlib.hpp @@ -511,34 +511,33 @@ public: static real maxreal() { return 1.7976931348623157e+308; } - inline static int div(int a, int b) { - if (b<=0) { - Core::abort(Core::fromUtf8("Деление на не натуральное число")); + static int div(int a, int b) + { + if (b <= 0) { + Core::abort(L"Деление на ненатуральное число"); return 0; - } else { - int aa = a; - if (aa<0) { - unsigned int absolunta = -1*(aa); - unsigned int quoti = absolunta / b + 1; - aa += quoti * b; - } - int m = aa % b; - return (a-m)/b; } + + int q = a / b, r = a % b; + if (r < 0) + q--; + return q; + } - inline static int mod(int a, int b) { - if (b<=0) { - Core::abort(Core::fromUtf8("Деление на не натуральное число")); + + static int mod(int a, int b) + { + if (b <= 0) { + Core::abort(L"Деление на ненатуральное число"); return 0; - } else { - if (a<0) { - unsigned int absolunta = -1*(a); - unsigned int quoti = absolunta / b + 1; - a += quoti * b; - } - return a % b; } + + int r = a % b; + if (r < 0) + r += b; + return r; } + template static int sign(T x) { if (x>0) return 1; else if (x<0) return -1; -- GitLab