diff --git a/src/CalcManager/Ratpack/support.cpp b/src/CalcManager/Ratpack/support.cpp index bcd31da2..7a1c2be3 100644 --- a/src/CalcManager/Ratpack/support.cpp +++ b/src/CalcManager/Ratpack/support.cpp @@ -303,6 +303,12 @@ void intrat(_Inout_ PRAT* px, uint32_t radix, int32_t precision) DUPRAT(pret, *px); remrat(&pret, rat_one); + // Flatten pret in case it's not aligned with px after remrat operation + if (!equnum((*px)->pq, pret->pq)) + { + flatrat(pret, radix, precision); + } + subrat(px, pret, precision); destroyrat(pret); diff --git a/src/CalculatorUnitTests/CalculatorManagerTest.cpp b/src/CalculatorUnitTests/CalculatorManagerTest.cpp index aa1b0fe9..8898546d 100644 --- a/src/CalculatorUnitTests/CalculatorManagerTest.cpp +++ b/src/CalculatorUnitTests/CalculatorManagerTest.cpp @@ -752,6 +752,11 @@ namespace CalculatorManagerTest Command commands10[] = { Command::ModeProgrammer, Command::Command1, Command::CommandRORC, Command::CommandRORC, Command::CommandNULL }; TestDriver::Test(L"-9,223,372,036,854,775,808", L"RoR(RoR(1))", commands10, true, false); + + Command commands11[] = { Command::ModeProgrammer, Command::CommandDec, Command::Command4, Command::Command2, Command::Command9, Command::Command4, + Command::Command9, Command::Command6, Command::Command7, Command::Command2, Command::Command9, Command::Command6, + Command::CommandDIV, Command::Command2, Command::Command5, Command::Command5, Command::CommandEQU, Command::CommandNULL }; + TestDriver::Test(L"16,843,009", L"4294967296 \x00F7 255=", commands11, true, false); } void CalculatorManagerTest::CalculatorManagerTestMemory()