From cfbed0cc2963f19ccd2442a70dc054aba125ea4d Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Fri, 10 Nov 2023 16:26:37 +0800 Subject: [PATCH] upd: allow 0 in mod --- src/utils.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/utils.cpp b/src/utils.cpp index ab3274e..284a310 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -304,6 +304,7 @@ std::any Divv(std::any a, std::any b) { std::any Mod(std::any a, std::any b) { if (std::any_cast(&a)) a = (bool)false; if (std::any_cast(&b)) b = (bool)false; + if (std::any_cast(&a) != nullptr) a = ZYM::int2048(0); ConverToSameArithType(a, b); bool *ptr_a_bool = std::any_cast(&a); bool *ptr_b_bool = std::any_cast(&b); @@ -312,18 +313,17 @@ std::any Mod(std::any a, std::any b) { double *ptr_a_float = std::any_cast(&a); double *ptr_b_float = std::any_cast(&b); if ((ptr_a_float != nullptr) && (ptr_b_float != nullptr)) { - if ((*ptr_b_float) == 0) - throw InterpretException("Mod: divided by zero", 49); - return ZYM::int2048((*ptr_a_float) - - (*ptr_b_float) * - std::floor((*ptr_a_float) / (*ptr_b_float))); + // if ((*ptr_b_float) == 0) + // throw InterpretException("Mod: divided by zero", 49); + return (*ptr_a_float) - + (*ptr_b_float) * std::floor((*ptr_a_float) / (*ptr_b_float)); } else if ((ptr_a_int2048 != nullptr) && (ptr_b_int2048 != nullptr)) { - if ((*ptr_b_int2048) == 0) - throw InterpretException("Mod: divided by zero", 50); + // if ((*ptr_b_int2048) == 0) + // throw InterpretException("Mod: divided by zero", 50); return (*ptr_a_int2048) % (*ptr_b_int2048); } else if ((ptr_a_bool != nullptr) && (ptr_b_bool != nullptr)) { - if ((*ptr_b_bool) == 0) - throw InterpretException("Mod: divided by zero", 51); + // if ((*ptr_b_bool) == 0) + // throw InterpretException("Mod: divided by zero", 51); return ZYM::int2048(int(*ptr_a_bool) % int(*ptr_b_bool)); } else throw FatalError("Mod: Type Error", 52);