On 11/25/2019 2:56 PM, Markus Armbruster wrote:
Tao Xu <tao3...@intel.com> writes:

Support full 64bit precision, modify related test cases.

That's not true in general: long double need not be any wider than
double.

It might be true on the host machines we support, but I don't know.  If
we decide to rely on it, we better make the build fail when the host
machine doesn't meet our expectations, preferably in configure.

[...]
-    if ((val * mul >= 0xfffffffffffffc00) || val < 0) {
+    /* Values > UINT64_MAX overflow uint64_t */
+    if ((val * mul > UINT64_MAX) || val < 0) {
          retval = -ERANGE;
          goto out;
      }

Not portable.  If it was, we'd have made this changd long ago :)


OK. So the suitable solution is what you suggested in v14?

"A possible alternative is to parse the numeric part both as a double and as a 64 bit unsigned integer, then use whatever consumes more characters. This enables providing full 64 bits unless you actually use
a fraction."

I will try this way.

Reply via email to