[Cfp-interest] outstanding issues
Jim Thomas
jaswthomas at sbcglobal.net
Wed Apr 11 10:57:41 PDT 2012
This looks like an approach to consider. Freestanding implementations already need to support ellipsis notation. Instead of the 'Q' modifier we could have an optional 'L', which would cover all the standard floating types.
-Jim
On Apr 11, 2012, at 10:23 AM, Fred J. Tydeman wrote:
> On Tue, 10 Apr 2012 16:35:30 -0700 Jim Thomas wrote:
>>
>> ISSUE 3: Would it be better to restrict the format specifiers
>> that the strfrom functions have to support?
>
>
> I recently discovered that gcc has similar support.
>> From the info pages on libquadmath:
>
> 3.2 `quadmath_snprintf' -- Convert to string
> ============================================
>
> The function `quadmath_snprintf' converts a `__float128' floating-point
> number into a string. It is a specialized alternative to `snprintf',
> where the format string is restricted to a single conversion specifier
> with `Q' modifier and conversion specifier `e', `E', `f', `F', `g',
> `G', `a' or `A', with no extra characters before or after the
> conversion specifier. The `%m$' or `*m$' style must not be used in the
> format.
>
> Syntax
> `int quadmath_snprintf (char *s, size_t size, const char *format,
> ...)'
>
> _Arguments_:
> S output string
> SIZE byte size of the string, including tailing NUL
> FORMAT conversion specifier string
>
> Example
> #include <quadmath.h>
> #include <stdlib.h>
> #include <stdio.h>
>
> int main ()
> {
> __float128 r;
> int prec = 20;
> int width = 46;
> char buf[128];
>
> r = 2.0q;
> r = sqrtq (r);
> int n = quadmath_snprintf (buf, sizeof buf, "%+-#*.20Qe", width, r);
> if ((size_t) n < sizeof buf)
> printf ("%s\n", buf);
> /* Prints: +1.41421356237309504880e+00 */
> quadmath_snprintf (buf, sizeof buf, "%Qa", r);
> if ((size_t) n < sizeof buf)
> printf ("%s\n", buf);
> /* Prints: 0x1.6a09e667f3bcc908b2fb1366ea96p+0 */
> n = quadmath_snprintf (NULL, 0, "%+-#46.*Qe", prec, r);
> if (n > -1)
> {
> char *str = malloc (n + 1);
> if (str)
> {
> quadmath_snprintf (str, n + 1, "%+-#46.*Qe", prec, r);
> printf ("%s\n", str);
> /* Prints: +1.41421356237309504880e+00 */
> }
> free (str);
> }
> return 0;
> }
>
>
> On some targets when supported by the C library hooks are installed
> for `printf' family of functions, so that `printf ("%Qe", 1.2Q);' etc.
> works too.
>
>
>
>
>
> ---
> Fred J. Tydeman Tydeman Consulting
> tydeman at tybor.com Testing, numerics, programming
> +1 (775) 358-9748 Vice-chair of PL22.11 (ANSI "C")
> Sample C99+FPCE tests: http://www.tybor.com
> Savers sleep well, investors eat well, spenders work forever.
>
> _______________________________________________
> Cfp-interest mailing list
> Cfp-interest at oakapple.net
> http://mailman.oakapple.net/mailman/listinfo/cfp-interest
More information about the Cfp-interest
mailing list