From 072095ebead4caaa4f46b83f17ba497f66e239ab Mon Sep 17 00:00:00 2001 From: Bernhard Seckinger Date: Thu, 17 Oct 2019 15:44:41 +0200 Subject: [PATCH] Fix Issue 20282 - CustomFloat.dig fails at some values. --- std/numeric.d | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/std/numeric.d b/std/numeric.d index 465adcc6a..d8021de58 100644 --- a/std/numeric.d +++ b/std/numeric.d @@ -403,9 +403,8 @@ public: /// Returns: number of decimal digits of precision static @property size_t dig() { - auto shiftcnt = precision - ((flags&Flags.storeNormalized) != 0); - immutable x = (shiftcnt == 64) ? 0 : 1uL << shiftcnt; - return cast(size_t) log10(x); + auto shiftcnt = precision - ((flags&Flags.storeNormalized) == 0); + return shiftcnt == 64 ? 19 : cast(size_t) log10(1uL << shiftcnt); } /// Returns: smallest increment to the value 1 @@ -746,10 +745,10 @@ public: { static assert(CustomFloat!(1, 6).dig == 0); static assert(CustomFloat!(9, 6).dig == 2); -// static assert(CustomFloat!(10, 5).dig == 3); // doesn't work yet due to bug 20282 -// static assert(CustomFloat!(10, 6, CustomFloatFlags.none).dig == 2); // doesn't work yet due to bug 20282 + static assert(CustomFloat!(10, 5).dig == 3); + static assert(CustomFloat!(10, 6, CustomFloatFlags.none).dig == 2); static assert(CustomFloat!(11, 5, CustomFloatFlags.none).dig == 3); -// static assert(CustomFloat!(64, 7).dig == 19); // doesn't work yet due to bug 20282 + static assert(CustomFloat!(64, 7).dig == 19); } // testing .mant_dig