DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(gmp.info.gz) Formatted Output Strings

Info Catalog (gmp.info.gz) Formatted Output (gmp.info.gz) Formatted Output (gmp.info.gz) Formatted Output Functions
 
 Format Strings
 ==============
 
 `gmp_printf' and friends accept format strings similar to the standard C
 `printf' ( Formatted Output (libc)Formatted Output.).  A format
 specification is of the form
 
      % [flags] [width] [.[precision]] [type] conv
 
    GMP adds types `Z', `Q' and `F' for `mpz_t', `mpq_t' and `mpf_t'
 respectively, `M' for `mp_limb_t', and `N' for an `mp_limb_t' array.
 `Z', `Q', `M' and `N' behave like integers.  `Q' will print a `/' and a
 denominator, if needed.  `F' behaves like a float.  For example,
 
      mpz_t z;
      gmp_printf ("%s is an mpz %Zd\n", "here", z);
      
      mpq_t q;
      gmp_printf ("a hex rational: %#40Qx\n", q);
      
      mpf_t f;
      int   n;
      gmp_printf ("fixed point mpf %.*Ff with %d digits\n", n, f, n);
      
      mp_limb_t l;
      gmp_printf ("limb %Mu\n", limb);
      
      const mp_limb_t *ptr;
      mp_size_t       size;
      gmp_printf ("limb array %Nx\n", ptr, size);
 
    For `N' the limbs are expected least significant first, as per the
 `mpn' functions ( Low-level Functions).  A negative size can be
 given to print the value as a negative.
 
    All the standard C `printf' types behave the same as the C library
 `printf', and can be freely intermixed with the GMP extensions.  In the
 current implementation the standard parts of the format string are
 simply handed to `printf' and only the GMP extensions handled directly.
 
    The flags accepted are as follows.  GLIBC style ' is only for the
 standard C types (not the GMP types), and only if the C library
 supports it.
 
      0         pad with zeros (rather than spaces)
      #         show the base with `0x', `0X' or `0'
      +         always show a sign
      (space)   show a space or a `-' sign
      '         group digits, GLIBC style (not GMP types)
 
    The optional width and precision can be given as a number within the
 format string, or as a `*' to take an extra parameter of type `int', the
 same as the standard `printf'.
 
    The standard types accepted are as follows.  `h' and `l' are
 portable, the rest will depend on the compiler (or include files) for
 the type and the C library for the output.
 
      h         short
      hh        char
      j         intmax_t or uintmax_t
      l         long or wchar_t
      ll        long long
      L         long double
      q         quad_t or u_quad_t
      t         ptrdiff_t
      z         size_t
 
 The GMP types are
 
      F         mpf_t, float conversions
      Q         mpq_t, integer conversions
      M         mp_limb_t, integer conversions
      N         mp_limb_t array, integer conversions
      Z         mpz_t, integer conversions
 
    The conversions accepted are as follows.  `a' and `A' are always
 supported for `mpf_t' but depend on the C library for standard C float
 types.  `m' and `p' depend on the C library.
 
      a A       hex floats, C99 style
      c         character
      d         decimal integer
      e E       scientific format float
      f         fixed point float
      i         same as d
      g G       fixed or scientific float
      m         `strerror' string, GLIBC style
      n         store characters written so far
      o         octal integer
      p         pointer
      s         string
      u         unsigned integer
      x X       hex integer
 
    `o', `x' and `X' are unsigned for the standard C types, but for
 types `Z', `Q' and `N' they are signed.  `u' is not meaningful for `Z',
 `Q' and `N'.
 
    `M' is a proxy for the C library `l' or `L', according to the size
 of `mp_limb_t'.  Unsigned conversions will be usual, but a signed
 conversion can be used and will interpret the value as a twos complement
 negative.
 
    `n' can be used with any type, even the GMP types.
 
    Other types or conversions that might be accepted by the C library
 `printf' cannot be used through `gmp_printf', this includes for
 instance extensions registered with GLIBC `register_printf_function'.
 Also currently there's no support for POSIX `$' style numbered arguments
 (perhaps this will be added in the future).
 
    The precision field has it's usual meaning for integer `Z' and float
 `F' types, but is currently undefined for `Q' and should not be used
 with that.
 
    `mpf_t' conversions only ever generate as many digits as can be
 accurately represented by the operand, the same as `mpf_get_str' does.
 Zeros will be used if necessary to pad to the requested precision.  This
 happens even for an `f' conversion of an `mpf_t' which is an integer,
 for instance 2^1024 in an `mpf_t' of 128 bits precision will only
 produce about 40 digits, then pad with zeros to the decimal point.  An
 empty precision field like `%.Fe' or `%.Ff' can be used to specifically
 request just the significant digits.
 
    The decimal point character (or string) is taken from the current
 locale settings on systems which provide `localeconv' ( Locales
 and Internationalization (libc)Locales.).  The C library will normally
 do the same for standard float output.
 
    The format string is only interpreted as plain `char's, multibyte
 characters are not recognised.  Perhaps this will change in the future.
 
Info Catalog (gmp.info.gz) Formatted Output (gmp.info.gz) Formatted Output (gmp.info.gz) Formatted Output Functions
automatically generated byinfo2html