From ba57f6adbe9f5b7635d010b6d8c0c378ff599c42 Mon Sep 17 00:00:00 2001 From: Ralf Ahlbrink Date: Sun, 26 Apr 2026 15:10:25 +0200 Subject: [PATCH] Fix: Root solver converges prematurely in Std display mode In Std mode, algebraic::epsilon() used DisplayDigits()+1=21 as convergence target regardless of Precision. Fixes #1679 --- src/algebraic.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/algebraic.cc b/src/algebraic.cc index 649f63a9..eaefd722 100644 --- a/src/algebraic.cc +++ b/src/algebraic.cc @@ -1396,7 +1396,9 @@ algebraic_p algebraic::epsilon(int impr) { int disp = Settings.DisplayDigits(); int prec = Settings.Precision(); - int dig = std::min(disp + 1, std::max(prec - impr, 3)); + int dig = Settings.DisplayMode() == object::ID_Std + ? std::max(prec - impr, 3) + : std::min(disp + 1, std::max(prec - impr, 3)); algebraic_p eps = decimal::make(1, -dig); return eps; }