[libc-commits] [libc] [llvm] [libc] Move printf long double to simple calc (PR #75414)
Guillaume Chatelet via libc-commits
libc-commits at lists.llvm.org
Thu Dec 21 04:56:46 PST 2023
================
@@ -13,18 +13,27 @@
#include "src/__support/CPP/type_traits.h"
#include "src/__support/FPUtil/FPBits.h"
+#include "src/__support/FPUtil/FloatProperties.h"
#include "src/__support/FPUtil/dyadic_float.h"
#include "src/__support/UInt.h"
#include "src/__support/common.h"
#include "src/__support/libc_assert.h"
+#include "src/__support/macros/attributes.h"
// This file has 5 compile-time flags to allow the user to configure the float
-// to string behavior. These allow the user to select which 2 of the 3 useful
-// properties they want. The useful properties are:
-// 1) Speed of Evaluation
-// 2) Small Size of Binary
-// 3) Centered Output Value
-// These are explained below with the flags that are missing each one.
+// to string behavior. These were used to explore tradeoffs during the design
+// phase, and can still be used to gain specific properties. Unless you
+// specifically know what you're doing, you should leave all these flags off.
+
+// LIBC_COPT_FLOAT_TO_STR_NO_SPECIALIZE_LD
+// This flag disables the separate long double conversion implementation. It is
+// not based on the Ryu algorithm, instead generating the digits by
+// multiplying/dividing the written-out number by 10^9 to get blocks. It's
+// significantly faster than INT_CALC, only about 10x slower than MEGA_TABLE,
+// and is small in binary size. Its downside is that it always calculates all
+// of the digits above the decimal point, making it ineffecient for %e calls
+// with large exponents. If this flag is not set, no other flags will change
+// the long double behavior.
----------------
gchatelet wrote:
Same comments since it's a copy/paste.
https://github.com/llvm/llvm-project/pull/75414
More information about the libc-commits
mailing list