glib2 3.1.3-x86-mingw32 → 3.1.4-x86-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +8 -8
- data/ext/glib2/extconf.rb +2 -1
- data/ext/glib2/rbglib.h +1 -1
- data/ext/glib2/rbgobj_object.c +13 -0
- data/lib/2.2/glib2.so +0 -0
- data/lib/2.3/glib2.so +0 -0
- data/lib/2.4/glib2.so +0 -0
- data/lib/glib2/deprecatable.rb +6 -2
- data/lib/gnome2/rake/external-package.rb +25 -1
- data/vendor/local/bin/asn1Coding.exe +0 -0
- data/vendor/local/bin/asn1Decoding.exe +0 -0
- data/vendor/local/bin/asn1Parser.exe +0 -0
- data/vendor/local/bin/envsubst.exe +0 -0
- data/vendor/local/bin/gdbus.exe +0 -0
- data/vendor/local/bin/gettext.exe +0 -0
- data/vendor/local/bin/gettext.sh +2 -3
- data/vendor/local/bin/gio-querymodules.exe +0 -0
- data/vendor/local/bin/gio.exe +0 -0
- data/vendor/local/bin/glib-compile-resources.exe +0 -0
- data/vendor/local/bin/glib-compile-schemas.exe +0 -0
- data/vendor/local/bin/glib-genmarshal.exe +0 -0
- data/vendor/local/bin/gobject-query.exe +0 -0
- data/vendor/local/bin/gresource.exe +0 -0
- data/vendor/local/bin/gsettings.exe +0 -0
- data/vendor/local/bin/gspawn-win32-helper-console.exe +0 -0
- data/vendor/local/bin/gspawn-win32-helper.exe +0 -0
- data/vendor/local/bin/iconv.exe +0 -0
- data/vendor/local/bin/idn.exe +0 -0
- data/vendor/local/bin/libasprintf-0.dll +0 -0
- data/vendor/local/bin/libcharset-1.dll +0 -0
- data/vendor/local/bin/libffi-6.dll +0 -0
- data/vendor/local/bin/libgio-2.0-0.dll +0 -0
- data/vendor/local/bin/libglib-2.0-0.dll +0 -0
- data/vendor/local/bin/libgmodule-2.0-0.dll +0 -0
- data/vendor/local/bin/libgmp-10.dll +0 -0
- data/vendor/local/bin/libgnutls-30.dll +0 -0
- data/vendor/local/bin/libgobject-2.0-0.dll +0 -0
- data/vendor/local/bin/libgthread-2.0-0.dll +0 -0
- data/vendor/local/bin/libhogweed-4-2.dll +0 -0
- data/vendor/local/bin/libiconv-2.dll +0 -0
- data/vendor/local/bin/libidn-11.dll +0 -0
- data/vendor/local/bin/libintl-8.dll +0 -0
- data/vendor/local/bin/libnettle-6-2.dll +0 -0
- data/vendor/local/bin/libp11-kit-0.dll +0 -0
- data/vendor/local/bin/libpcre-1.dll +0 -0
- data/vendor/local/bin/libpcrecpp-0.dll +0 -0
- data/vendor/local/bin/libpcreposix-0.dll +0 -0
- data/vendor/local/bin/libtasn1-6.dll +0 -0
- data/vendor/local/bin/nettle-hash.exe +0 -0
- data/vendor/local/bin/nettle-lfib-stream.exe +0 -0
- data/vendor/local/bin/nettle-pbkdf2.exe +0 -0
- data/vendor/local/bin/ngettext.exe +0 -0
- data/vendor/local/bin/p11-kit.exe +0 -0
- data/vendor/local/bin/pcregrep.exe +0 -0
- data/vendor/local/bin/pcretest.exe +0 -0
- data/vendor/local/bin/pkcs1-conv.exe +0 -0
- data/vendor/local/bin/sexp-conv.exe +0 -0
- data/vendor/local/bin/trust.exe +0 -0
- data/vendor/local/include/autosprintf.h +1 -1
- data/vendor/local/include/gmp.h +6 -10
- data/vendor/local/include/iconv.h +2 -3
- data/vendor/local/include/idn-free.h +1 -1
- data/vendor/local/include/idna.h +1 -1
- data/vendor/local/include/libcharset.h +1 -2
- data/vendor/local/include/libintl.h +2 -3
- data/vendor/local/include/libtasn1.h +2 -2
- data/vendor/local/include/localcharset.h +2 -4
- data/vendor/local/include/pr29.h +1 -1
- data/vendor/local/include/punycode.h +1 -1
- data/vendor/local/include/stringprep.h +2 -2
- data/vendor/local/include/tld.h +2 -2
- data/vendor/local/lib/charset.alias +1 -1
- data/vendor/local/lib/gio/modules/libgiognutls.a +0 -0
- data/vendor/local/lib/gio/modules/libgiognutls.dll +0 -0
- data/vendor/local/lib/gio/modules/libgiognutls.dll.a +0 -0
- data/vendor/local/lib/libasprintf.a +0 -0
- data/vendor/local/lib/libasprintf.dll.a +0 -0
- data/vendor/local/lib/libcharset.a +0 -0
- data/vendor/local/lib/libcharset.dll.a +0 -0
- data/vendor/local/lib/libcharset.la +2 -2
- data/vendor/local/lib/libffi.dll.a +0 -0
- data/vendor/local/lib/libgio-2.0.dll.a +0 -0
- data/vendor/local/lib/libglib-2.0.dll.a +0 -0
- data/vendor/local/lib/libgmodule-2.0.dll.a +0 -0
- data/vendor/local/lib/libgmp.dll.a +0 -0
- data/vendor/local/lib/libgmp.la +1 -1
- data/vendor/local/lib/libgnutls.dll.a +0 -0
- data/vendor/local/lib/libgobject-2.0.dll.a +0 -0
- data/vendor/local/lib/libgthread-2.0.dll.a +0 -0
- data/vendor/local/lib/libhogweed.a +0 -0
- data/vendor/local/lib/libhogweed.dll.a +0 -0
- data/vendor/local/lib/libiconv.dll.a +0 -0
- data/vendor/local/lib/libiconv.la +5 -5
- data/vendor/local/lib/libidn.a +0 -0
- data/vendor/local/lib/libidn.dll.a +0 -0
- data/vendor/local/lib/libidn.la +1 -1
- data/vendor/local/lib/libintl.a +0 -0
- data/vendor/local/lib/libintl.dll.a +0 -0
- data/vendor/local/lib/libintl.la +1 -1
- data/vendor/local/lib/libnettle.dll.a +0 -0
- data/vendor/local/lib/libp11-kit.dll.a +0 -0
- data/vendor/local/lib/libpcre.dll.a +0 -0
- data/vendor/local/lib/libpcrecpp.dll.a +0 -0
- data/vendor/local/lib/libpcreposix.dll.a +0 -0
- data/vendor/local/lib/libtasn1.a +0 -0
- data/vendor/local/lib/libtasn1.dll.a +0 -0
- data/vendor/local/lib/libtasn1.la +1 -1
- data/vendor/local/lib/p11-kit/p11-kit-remote.exe +0 -0
- data/vendor/local/lib/pkcs11/p11-kit-trust.dll +0 -0
- data/vendor/local/lib/pkcs11/p11-kit-trust.dll.a +0 -0
- data/vendor/local/lib/pkgconfig/libidn.pc +2 -2
- data/vendor/local/lib/pkgconfig/libtasn1.pc +1 -1
- data/vendor/local/share/doc/{libiconv/iconv.1.html → iconv.1.html} +1 -2
- data/vendor/local/share/doc/{libiconv/iconv.3.html → iconv.3.html} +1 -2
- data/vendor/local/share/doc/{libiconv/iconv_close.3.html → iconv_close.3.html} +1 -2
- data/vendor/local/share/doc/{libiconv/iconv_open.3.html → iconv_open.3.html} +3 -3
- data/vendor/local/share/doc/iconv_open_into.3.html +132 -0
- data/vendor/local/share/doc/iconvctl.3.html +170 -0
- data/vendor/local/share/doc/libasprintf/autosprintf_all.html +1 -1
- data/vendor/local/share/emacs/site-lisp/idna.el +1 -1
- data/vendor/local/share/emacs/site-lisp/punycode.el +1 -1
- data/vendor/local/share/gettext/ABOUT-NLS +554 -554
- data/vendor/local/share/glib-2.0/codegen/__init__.pyc +0 -0
- data/vendor/local/share/glib-2.0/codegen/__init__.pyo +0 -0
- data/vendor/local/share/glib-2.0/codegen/codegen.pyc +0 -0
- data/vendor/local/share/glib-2.0/codegen/codegen.pyo +0 -0
- data/vendor/local/share/glib-2.0/codegen/codegen_docbook.pyc +0 -0
- data/vendor/local/share/glib-2.0/codegen/codegen_docbook.pyo +0 -0
- data/vendor/local/share/glib-2.0/codegen/codegen_main.pyc +0 -0
- data/vendor/local/share/glib-2.0/codegen/codegen_main.pyo +0 -0
- data/vendor/local/share/glib-2.0/codegen/config.pyc +0 -0
- data/vendor/local/share/glib-2.0/codegen/config.pyo +0 -0
- data/vendor/local/share/glib-2.0/codegen/dbustypes.pyc +0 -0
- data/vendor/local/share/glib-2.0/codegen/dbustypes.pyo +0 -0
- data/vendor/local/share/glib-2.0/codegen/parser.pyc +0 -0
- data/vendor/local/share/glib-2.0/codegen/parser.pyo +0 -0
- data/vendor/local/share/glib-2.0/codegen/utils.pyc +0 -0
- data/vendor/local/share/glib-2.0/codegen/utils.pyo +0 -0
- data/vendor/local/share/info/autosprintf.info +6 -5
- data/vendor/local/share/info/gmp.info +164 -161
- data/vendor/local/share/info/gmp.info-1 +2053 -2026
- data/vendor/local/share/info/gmp.info-2 +1365 -1367
- data/vendor/local/share/info/libidn.info +108 -106
- data/vendor/local/share/info/libtasn1.info +99 -83
- data/vendor/local/share/license/libidn/AUTHORS +1 -1
- data/vendor/local/share/locale/be/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/bg/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/ca/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/cs/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/cs/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/da/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/da/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/de/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/de/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/el/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/en@boldquot/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/en@boldquot/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/en@quot/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/en@quot/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/eo/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/eo/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/es/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/et/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/fi/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/fi/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/fr/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/fr/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/ga/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/gl/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/hr/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/hr/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/hu/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/hu/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/id/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/id/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/it/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/it/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/ja/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/ja/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/ko/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/nb/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/nl/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/nl/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/nn/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/pl/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/pl/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/pt/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/pt_BR/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/pt_BR/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/ro/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/ro/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/ru/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/sk/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/sl/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/sr/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/sr/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/sv/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/tr/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/uk/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/uk/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/vi/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/vi/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/zh_CN/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/zh_CN/LC_MESSAGES/libidn.mo +0 -0
- data/vendor/local/share/locale/zh_HK/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/locale/zh_TW/LC_MESSAGES/gettext-runtime.mo +0 -0
- data/vendor/local/share/man/man1/asn1Coding.1 +3 -3
- data/vendor/local/share/man/man1/asn1Decoding.1 +3 -3
- data/vendor/local/share/man/man1/asn1Parser.1 +3 -3
- data/vendor/local/share/man/man1/envsubst.1 +1 -1
- data/vendor/local/share/man/man1/gettext.1 +1 -1
- data/vendor/local/share/man/man1/iconv.1 +1 -1
- data/vendor/local/share/man/man1/idn.1 +2 -2
- data/vendor/local/share/man/man1/ngettext.1 +1 -1
- data/vendor/local/share/man/man3/asn1_array2tree.3 +1 -1
- data/vendor/local/share/man/man3/asn1_bit_der.3 +1 -1
- data/vendor/local/share/man/man3/asn1_check_version.3 +1 -1
- data/vendor/local/share/man/man3/asn1_copy_node.3 +1 -1
- data/vendor/local/share/man/man3/asn1_create_element.3 +1 -1
- data/vendor/local/share/man/man3/asn1_decode_simple_ber.3 +1 -1
- data/vendor/local/share/man/man3/asn1_decode_simple_der.3 +1 -1
- data/vendor/local/share/man/man3/asn1_delete_element.3 +1 -1
- data/vendor/local/share/man/man3/asn1_delete_structure.3 +1 -1
- data/vendor/local/share/man/man3/asn1_delete_structure2.3 +1 -1
- data/vendor/local/share/man/man3/asn1_der_coding.3 +1 -1
- data/vendor/local/share/man/man3/asn1_der_decoding.3 +1 -1
- data/vendor/local/share/man/man3/asn1_der_decoding2.3 +1 -1
- data/vendor/local/share/man/man3/asn1_der_decoding_element.3 +1 -1
- data/vendor/local/share/man/man3/asn1_der_decoding_startEnd.3 +1 -1
- data/vendor/local/share/man/man3/asn1_dup_node.3 +1 -1
- data/vendor/local/share/man/man3/asn1_encode_simple_der.3 +1 -1
- data/vendor/local/share/man/man3/asn1_expand_any_defined_by.3 +1 -1
- data/vendor/local/share/man/man3/asn1_expand_octet_string.3 +1 -1
- data/vendor/local/share/man/man3/asn1_find_node.3 +1 -1
- data/vendor/local/share/man/man3/asn1_find_structure_from_oid.3 +1 -1
- data/vendor/local/share/man/man3/asn1_get_bit_der.3 +1 -1
- data/vendor/local/share/man/man3/asn1_get_length_ber.3 +1 -1
- data/vendor/local/share/man/man3/asn1_get_length_der.3 +1 -1
- data/vendor/local/share/man/man3/asn1_get_object_id_der.3 +1 -1
- data/vendor/local/share/man/man3/asn1_get_octet_der.3 +7 -5
- data/vendor/local/share/man/man3/asn1_get_tag_der.3 +1 -1
- data/vendor/local/share/man/man3/asn1_length_der.3 +1 -1
- data/vendor/local/share/man/man3/asn1_number_of_elements.3 +1 -1
- data/vendor/local/share/man/man3/asn1_octet_der.3 +1 -1
- data/vendor/local/share/man/man3/asn1_parser2array.3 +1 -1
- data/vendor/local/share/man/man3/asn1_parser2tree.3 +1 -1
- data/vendor/local/share/man/man3/asn1_perror.3 +1 -1
- data/vendor/local/share/man/man3/asn1_print_structure.3 +1 -1
- data/vendor/local/share/man/man3/asn1_read_node_value.3 +1 -1
- data/vendor/local/share/man/man3/asn1_read_tag.3 +1 -1
- data/vendor/local/share/man/man3/asn1_read_value.3 +1 -1
- data/vendor/local/share/man/man3/asn1_read_value_type.3 +1 -1
- data/vendor/local/share/man/man3/asn1_strerror.3 +1 -1
- data/vendor/local/share/man/man3/asn1_write_value.3 +1 -1
- data/vendor/local/share/man/man3/bind_textdomain_codeset.3 +1 -1
- data/vendor/local/share/man/man3/bindtextdomain.3 +1 -1
- data/vendor/local/share/man/man3/gettext.3 +1 -1
- data/vendor/local/share/man/man3/iconv.3 +1 -1
- data/vendor/local/share/man/man3/iconv_close.3 +1 -1
- data/vendor/local/share/man/man3/iconv_open.3 +4 -3
- data/vendor/local/share/man/man3/iconv_open_into.3 +1 -1
- data/vendor/local/share/man/man3/iconvctl.3 +1 -1
- data/vendor/local/share/man/man3/idn_free.3 +2 -2
- data/vendor/local/share/man/man3/idna_strerror.3 +2 -2
- data/vendor/local/share/man/man3/idna_to_ascii_4i.3 +2 -2
- data/vendor/local/share/man/man3/idna_to_ascii_4z.3 +2 -2
- data/vendor/local/share/man/man3/idna_to_ascii_8z.3 +2 -2
- data/vendor/local/share/man/man3/idna_to_ascii_lz.3 +2 -2
- data/vendor/local/share/man/man3/idna_to_unicode_44i.3 +2 -2
- data/vendor/local/share/man/man3/idna_to_unicode_4z4z.3 +2 -2
- data/vendor/local/share/man/man3/idna_to_unicode_8z4z.3 +2 -2
- data/vendor/local/share/man/man3/idna_to_unicode_8z8z.3 +2 -2
- data/vendor/local/share/man/man3/idna_to_unicode_8zlz.3 +2 -2
- data/vendor/local/share/man/man3/idna_to_unicode_lzlz.3 +2 -2
- data/vendor/local/share/man/man3/ngettext.3 +1 -1
- data/vendor/local/share/man/man3/pr29_4.3 +2 -2
- data/vendor/local/share/man/man3/pr29_4z.3 +2 -2
- data/vendor/local/share/man/man3/pr29_8z.3 +2 -2
- data/vendor/local/share/man/man3/pr29_strerror.3 +2 -2
- data/vendor/local/share/man/man3/punycode_decode.3 +2 -2
- data/vendor/local/share/man/man3/punycode_encode.3 +2 -2
- data/vendor/local/share/man/man3/punycode_strerror.3 +2 -2
- data/vendor/local/share/man/man3/stringprep.3 +2 -2
- data/vendor/local/share/man/man3/stringprep_4i.3 +2 -2
- data/vendor/local/share/man/man3/stringprep_4zi.3 +2 -2
- data/vendor/local/share/man/man3/stringprep_check_version.3 +2 -2
- data/vendor/local/share/man/man3/stringprep_convert.3 +2 -2
- data/vendor/local/share/man/man3/stringprep_locale_charset.3 +2 -2
- data/vendor/local/share/man/man3/stringprep_locale_to_utf8.3 +2 -2
- data/vendor/local/share/man/man3/stringprep_profile.3 +2 -2
- data/vendor/local/share/man/man3/stringprep_strerror.3 +2 -2
- data/vendor/local/share/man/man3/stringprep_ucs4_nfkc_normalize.3 +2 -2
- data/vendor/local/share/man/man3/stringprep_ucs4_to_utf8.3 +2 -2
- data/vendor/local/share/man/man3/stringprep_unichar_to_utf8.3 +2 -2
- data/vendor/local/share/man/man3/stringprep_utf8_nfkc_normalize.3 +2 -2
- data/vendor/local/share/man/man3/stringprep_utf8_to_locale.3 +2 -2
- data/vendor/local/share/man/man3/stringprep_utf8_to_ucs4.3 +2 -2
- data/vendor/local/share/man/man3/stringprep_utf8_to_unichar.3 +2 -2
- data/vendor/local/share/man/man3/textdomain.3 +1 -1
- data/vendor/local/share/man/man3/tld_check_4.3 +2 -2
- data/vendor/local/share/man/man3/tld_check_4t.3 +2 -2
- data/vendor/local/share/man/man3/tld_check_4tz.3 +2 -2
- data/vendor/local/share/man/man3/tld_check_4z.3 +2 -2
- data/vendor/local/share/man/man3/tld_check_8z.3 +2 -2
- data/vendor/local/share/man/man3/tld_check_lz.3 +2 -2
- data/vendor/local/share/man/man3/tld_default_table.3 +2 -2
- data/vendor/local/share/man/man3/tld_get_4.3 +2 -2
- data/vendor/local/share/man/man3/tld_get_4z.3 +2 -2
- data/vendor/local/share/man/man3/tld_get_table.3 +2 -2
- data/vendor/local/share/man/man3/tld_get_z.3 +2 -2
- data/vendor/local/share/man/man3/tld_strerror.3 +2 -2
- metadata +12 -12
- data/vendor/local/share/doc/libiconv/iconv_open_into.3.html +0 -120
- data/vendor/local/share/doc/libiconv/iconvctl.3.html +0 -189
@@ -1,83 +1,22 @@
|
|
1
|
-
This is
|
2
|
-
../../gmp/doc/gmp.texi.
|
1
|
+
This is gmp.info, produced by makeinfo version 6.1 from gmp.texi.
|
3
2
|
|
4
|
-
|
5
|
-
|
3
|
+
This manual describes how to install and use the GNU multiple precision
|
4
|
+
arithmetic library, version 6.1.2.
|
6
5
|
|
7
|
-
Copyright 1991, 1993-
|
8
|
-
|
9
|
-
Permission is granted to copy, distribute and/or modify this
|
10
|
-
document under the terms of the GNU Free Documentation License, Version
|
11
|
-
1.3 or any later version published by the Free Software Foundation;
|
12
|
-
with no Invariant Sections, with the Front-Cover Texts being "A GNU
|
13
|
-
Manual", and with the Back-Cover Texts being "You have freedom to copy
|
14
|
-
and modify this GNU Manual, like GNU software". A copy of the license
|
15
|
-
is included in *Note GNU Free Documentation License::.
|
6
|
+
Copyright 1991, 1993-2016 Free Software Foundation, Inc.
|
16
7
|
|
8
|
+
Permission is granted to copy, distribute and/or modify this document
|
9
|
+
under the terms of the GNU Free Documentation License, Version 1.3 or
|
10
|
+
any later version published by the Free Software Foundation; with no
|
11
|
+
Invariant Sections, with the Front-Cover Texts being "A GNU Manual", and
|
12
|
+
with the Back-Cover Texts being "You have freedom to copy and modify
|
13
|
+
this GNU Manual, like GNU software". A copy of the license is included
|
14
|
+
in *note GNU Free Documentation License::.
|
17
15
|
INFO-DIR-SECTION GNU libraries
|
18
16
|
START-INFO-DIR-ENTRY
|
19
17
|
* gmp: (gmp). GNU Multiple Precision Arithmetic Library.
|
20
18
|
END-INFO-DIR-ENTRY
|
21
19
|
|
22
|
-
|
23
|
-
File: gmp.info, Node: Exact Division, Next: Exact Remainder, Prev: Block-Wise Barrett Division, Up: Division Algorithms
|
24
|
-
|
25
|
-
15.2.5 Exact Division
|
26
|
-
---------------------
|
27
|
-
|
28
|
-
A so-called exact division is when the dividend is known to be an exact
|
29
|
-
multiple of the divisor. Jebelean's exact division algorithm uses this
|
30
|
-
knowledge to make some significant optimizations (*note References::).
|
31
|
-
|
32
|
-
The idea can be illustrated in decimal for example with 368154
|
33
|
-
divided by 543. Because the low digit of the dividend is 4, the low
|
34
|
-
digit of the quotient must be 8. This is arrived at from 4*7 mod 10,
|
35
|
-
using the fact 7 is the modular inverse of 3 (the low digit of the
|
36
|
-
divisor), since 3*7 == 1 mod 10. So 8*543=4344 can be subtracted from
|
37
|
-
the dividend leaving 363810. Notice the low digit has become zero.
|
38
|
-
|
39
|
-
The procedure is repeated at the second digit, with the next
|
40
|
-
quotient digit 7 (7 == 1*7 mod 10), subtracting 7*543=3801, leaving
|
41
|
-
325800. And finally at the third digit with quotient digit 6 (8*7 mod
|
42
|
-
10), subtracting 6*543=3258 leaving 0. So the quotient is 678.
|
43
|
-
|
44
|
-
Notice however that the multiplies and subtractions don't need to
|
45
|
-
extend past the low three digits of the dividend, since that's enough
|
46
|
-
to determine the three quotient digits. For the last quotient digit no
|
47
|
-
subtraction is needed at all. On a 2NxN division like this one, only
|
48
|
-
about half the work of a normal basecase division is necessary.
|
49
|
-
|
50
|
-
For an NxM exact division producing Q=N-M quotient limbs, the saving
|
51
|
-
over a normal basecase division is in two parts. Firstly, each of the
|
52
|
-
Q quotient limbs needs only one multiply, not a 2x1 divide and
|
53
|
-
multiply. Secondly, the crossproducts are reduced when Q>M to
|
54
|
-
Q*M-M*(M+1)/2, or when Q<=M to Q*(Q-1)/2. Notice the savings are
|
55
|
-
complementary. If Q is big then many divisions are saved, or if Q is
|
56
|
-
small then the crossproducts reduce to a small number.
|
57
|
-
|
58
|
-
The modular inverse used is calculated efficiently by `binvert_limb'
|
59
|
-
in `gmp-impl.h'. This does four multiplies for a 32-bit limb, or six
|
60
|
-
for a 64-bit limb. `tune/modlinv.c' has some alternate implementations
|
61
|
-
that might suit processors better at bit twiddling than multiplying.
|
62
|
-
|
63
|
-
The sub-quadratic exact division described by Jebelean in "Exact
|
64
|
-
Division with Karatsuba Complexity" is not currently implemented. It
|
65
|
-
uses a rearrangement similar to the divide and conquer for normal
|
66
|
-
division (*note Divide and Conquer Division::), but operating from low
|
67
|
-
to high. A further possibility not currently implemented is
|
68
|
-
"Bidirectional Exact Integer Division" by Krandick and Jebelean which
|
69
|
-
forms quotient limbs from both the high and low ends of the dividend,
|
70
|
-
and can halve once more the number of crossproducts needed in a 2NxN
|
71
|
-
division.
|
72
|
-
|
73
|
-
A special case exact division by 3 exists in `mpn_divexact_by3',
|
74
|
-
supporting Toom-3 multiplication and `mpq' canonicalizations. It forms
|
75
|
-
quotient digits with a multiply by the modular inverse of 3 (which is
|
76
|
-
`0xAA..AAB') and uses two comparisons to determine a borrow for the next
|
77
|
-
limb. The multiplications don't need to be on the dependent chain, as
|
78
|
-
long as the effect of the borrows is applied, which can help chips with
|
79
|
-
pipelined multipliers.
|
80
|
-
|
81
20
|
|
82
21
|
File: gmp.info, Node: Exact Remainder, Next: Small Quotient Division, Prev: Exact Division, Up: Division Algorithms
|
83
22
|
|
@@ -86,9 +25,9 @@ File: gmp.info, Node: Exact Remainder, Next: Small Quotient Division, Prev: E
|
|
86
25
|
|
87
26
|
If the exact division algorithm is done with a full subtraction at each
|
88
27
|
stage and the dividend isn't a multiple of the divisor, then low zero
|
89
|
-
limbs are produced but with a remainder in the high limbs. For
|
90
|
-
|
91
|
-
|
28
|
+
limbs are produced but with a remainder in the high limbs. For dividend
|
29
|
+
a, divisor d, quotient q, and b = 2^mp_bits_per_limb, this remainder r
|
30
|
+
is of the form
|
92
31
|
|
93
32
|
a = q*d + r*b^n
|
94
33
|
|
@@ -97,14 +36,14 @@ that being the number of limbs produced for q. r will be in the range
|
|
97
36
|
0<=r<d and can be viewed as a remainder, but one shifted up by a factor
|
98
37
|
of b^n.
|
99
38
|
|
100
|
-
Carrying out full subtractions at each stage means the same number
|
101
|
-
|
102
|
-
|
39
|
+
Carrying out full subtractions at each stage means the same number of
|
40
|
+
cross products must be done as a normal division, but there's still some
|
41
|
+
single limb divisions saved. When d is a single limb some
|
103
42
|
simplifications arise, providing good speedups on a number of
|
104
43
|
processors.
|
105
44
|
|
106
|
-
The functions
|
107
|
-
internal
|
45
|
+
The functions 'mpn_divexact_by3', 'mpn_modexact_1_odd' and the
|
46
|
+
internal 'mpn_redc_X' functions differ subtly in how they return r,
|
108
47
|
leading to some negations in the above formula, but all are essentially
|
109
48
|
the same.
|
110
49
|
|
@@ -113,19 +52,19 @@ divisibility or congruence tests which are potentially more efficient
|
|
113
52
|
than a normal division.
|
114
53
|
|
115
54
|
The factor of b^n on r can be ignored in a GCD when d is odd, hence
|
116
|
-
the use of
|
55
|
+
the use of 'mpn_modexact_1_odd' by 'mpn_gcd_1' and 'mpz_kronecker_ui'
|
117
56
|
etc (*note Greatest Common Divisor Algorithms::).
|
118
57
|
|
119
|
-
Montgomery's REDC method for modular multiplications uses operands
|
120
|
-
|
121
|
-
|
122
|
-
|
58
|
+
Montgomery's REDC method for modular multiplications uses operands of
|
59
|
+
the form of x*b^-n and y*b^-n and on calculating (x*b^-n)*(y*b^-n) uses
|
60
|
+
the factor of b^n in the exact remainder to reach a product in the same
|
61
|
+
form (x*y)*b^-n (*note Modular Powering Algorithm::).
|
123
62
|
|
124
63
|
Notice that r generally gives no useful information about the
|
125
64
|
ordinary remainder a mod d since b^n mod d could be anything. If
|
126
65
|
however b^n == 1 mod d, then r is the negative of the ordinary
|
127
66
|
remainder. This occurs whenever d is a factor of b^n-1, as for example
|
128
|
-
with 3 in
|
67
|
+
with 3 in 'mpn_divexact_by3'. For a 32 or 64 bit limb other such
|
129
68
|
factors include 5, 17 and 257, but no particular use has been found for
|
130
69
|
this.
|
131
70
|
|
@@ -135,16 +74,16 @@ File: gmp.info, Node: Small Quotient Division, Prev: Exact Remainder, Up: Div
|
|
135
74
|
15.2.7 Small Quotient Division
|
136
75
|
------------------------------
|
137
76
|
|
138
|
-
An NxM division where the number of quotient limbs Q=N-M is small can
|
139
|
-
|
77
|
+
An NxM division where the number of quotient limbs Q=N-M is small can be
|
78
|
+
optimized somewhat.
|
140
79
|
|
141
80
|
An ordinary basecase division normalizes the divisor by shifting it
|
142
81
|
to make the high bit set, shifting the dividend accordingly, and
|
143
|
-
shifting the remainder back down at the end of the calculation. This
|
144
|
-
|
145
|
-
division of just the top 2*Q limbs of the dividend by the top Q limbs
|
146
|
-
|
147
|
-
|
82
|
+
shifting the remainder back down at the end of the calculation. This is
|
83
|
+
wasteful if only a few quotient limbs are to be formed. Instead a
|
84
|
+
division of just the top 2*Q limbs of the dividend by the top Q limbs of
|
85
|
+
the divisor can be used to form a trial quotient. This requires only
|
86
|
+
those limbs normalized, not the whole of the divisor and dividend.
|
148
87
|
|
149
88
|
A multiply and subtract then applies the trial quotient to the M-Q
|
150
89
|
unused limbs of the divisor and N-Q dividend limbs (which includes Q
|
@@ -155,11 +94,11 @@ limbs that will arise from the subtraction. An addback is done if the
|
|
155
94
|
quotient still turns out to be 1 too big.
|
156
95
|
|
157
96
|
This whole procedure is essentially the same as one step of the
|
158
|
-
basecase algorithm done in a Q limb base, though with the trial
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
97
|
+
basecase algorithm done in a Q limb base, though with the trial quotient
|
98
|
+
test done only with the high limbs, not an entire Q limb "digit"
|
99
|
+
product. The correctness of this weaker test can be established by
|
100
|
+
following the argument of Knuth section 4.3.1 exercise 20 but with the
|
101
|
+
v2*q>b*r+u2 condition appropriately relaxed.
|
163
102
|
|
164
103
|
|
165
104
|
File: gmp.info, Node: Greatest Common Divisor Algorithms, Next: Powering Algorithms, Prev: Division Algorithms, Up: Algorithms
|
@@ -189,25 +128,25 @@ simply consists of successively reducing odd operands a and b using
|
|
189
128
|
strip factors of 2 from a
|
190
129
|
|
191
130
|
The Euclidean GCD algorithm, as per Knuth algorithms E and A,
|
192
|
-
repeatedly computes the quotient q = floor(a/b) and replaces a,b by v,
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
When the implied quotient is large, meaning b is much smaller than
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
The final 1x1 GCD in
|
208
|
-
described above. For two N-bit operands, the algorithm takes about
|
209
|
-
|
210
|
-
|
131
|
+
repeatedly computes the quotient q = floor(a/b) and replaces a,b by v, u
|
132
|
+
- q v. The binary algorithm has so far been found to be faster than the
|
133
|
+
Euclidean algorithm everywhere. One reason the binary method does well
|
134
|
+
is that the implied quotient at each step is usually small, so often
|
135
|
+
only one or two subtractions are needed to get the same effect as a
|
136
|
+
division. Quotients 1, 2 and 3 for example occur 67.7% of the time, see
|
137
|
+
Knuth section 4.5.3 Theorem E.
|
138
|
+
|
139
|
+
When the implied quotient is large, meaning b is much smaller than a,
|
140
|
+
then a division is worthwhile. This is the basis for the initial a mod
|
141
|
+
b reductions in 'mpn_gcd' and 'mpn_gcd_1' (the latter for both Nx1 and
|
142
|
+
1x1 cases). But after that initial reduction, big quotients occur too
|
143
|
+
rarely to make it worth checking for them.
|
144
|
+
|
145
|
+
|
146
|
+
The final 1x1 GCD in 'mpn_gcd_1' is done in the generic C code as
|
147
|
+
described above. For two N-bit operands, the algorithm takes about 0.68
|
148
|
+
iterations per bit. For optimum performance some attention needs to be
|
149
|
+
paid to the way the factors of 2 are stripped from a.
|
211
150
|
|
212
151
|
Firstly it may be noted that in twos complement the number of low
|
213
152
|
zero bits on a-b is the same as b-a, so counting or testing can begin on
|
@@ -216,8 +155,8 @@ a-b without waiting for abs(a-b) to be determined.
|
|
216
155
|
A loop stripping low zero bits tends not to branch predict well,
|
217
156
|
since the condition is data dependent. But on average there's only a
|
218
157
|
few low zeros, so an option is to strip one or two bits arithmetically
|
219
|
-
then loop for more (as done for AMD K6). Or use a lookup table to get
|
220
|
-
|
158
|
+
then loop for more (as done for AMD K6). Or use a lookup table to get a
|
159
|
+
count for several bits then loop for more (as done for AMD K7). An
|
221
160
|
alternative approach is to keep just one of a or b odd and iterate
|
222
161
|
|
223
162
|
a,b = abs(a-b), min(a,b)
|
@@ -245,90 +184,88 @@ File: gmp.info, Node: Lehmer's Algorithm, Next: Subquadratic GCD, Prev: Binar
|
|
245
184
|
|
246
185
|
Lehmer's improvement of the Euclidean algorithms is based on the
|
247
186
|
observation that the initial part of the quotient sequence depends only
|
248
|
-
on the most significant parts of the inputs.
|
187
|
+
on the most significant parts of the inputs. The variant of Lehmer's
|
249
188
|
algorithm used in GMP splits off the most significant two limbs, as
|
250
|
-
suggested, e.g., in "A Double-Digit Lehmer-Euclid Algorithm" by
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
division.
|
189
|
+
suggested, e.g., in "A Double-Digit Lehmer-Euclid Algorithm" by Jebelean
|
190
|
+
(*note References::). The quotients of two double-limb inputs are
|
191
|
+
collected as a 2 by 2 matrix with single-limb elements. This is done by
|
192
|
+
the function 'mpn_hgcd2'. The resulting matrix is applied to the inputs
|
193
|
+
using 'mpn_mul_1' and 'mpn_submul_1'. Each iteration usually reduces
|
194
|
+
the inputs by almost one limb. In the rare case of a large quotient, no
|
195
|
+
progress can be made by examining just the most significant two limbs,
|
196
|
+
and the quotient is computed using plain division.
|
259
197
|
|
260
198
|
The resulting algorithm is asymptotically O(N^2), just as the
|
261
|
-
Euclidean algorithm and the binary algorithm.
|
262
|
-
work are the calls to
|
263
|
-
the linear work is also significant.
|
264
|
-
|
199
|
+
Euclidean algorithm and the binary algorithm. The quadratic part of the
|
200
|
+
work are the calls to 'mpn_mul_1' and 'mpn_submul_1'. For small sizes,
|
201
|
+
the linear work is also significant. There are roughly N calls to the
|
202
|
+
'mpn_hgcd2' function. This function uses a couple of important
|
265
203
|
optimizations:
|
266
204
|
|
267
|
-
* It uses the same relaxed notion of correctness as
|
268
|
-
next section).
|
205
|
+
* It uses the same relaxed notion of correctness as 'mpn_hgcd' (see
|
206
|
+
next section). This means that when called with the most
|
269
207
|
significant two limbs of two large numbers, the returned matrix
|
270
|
-
does not always correspond exactly to the initial quotient
|
271
|
-
|
272
|
-
|
208
|
+
does not always correspond exactly to the initial quotient sequence
|
209
|
+
for the two large numbers; the final quotient may sometimes be one
|
210
|
+
off.
|
273
211
|
|
274
212
|
* It takes advantage of the fact the quotients are usually small.
|
275
213
|
The division operator is not used, since the corresponding
|
276
|
-
assembler instruction is very slow on most architectures.
|
277
|
-
code could probably be improved further, it uses many branches
|
278
|
-
|
214
|
+
assembler instruction is very slow on most architectures. (This
|
215
|
+
code could probably be improved further, it uses many branches that
|
216
|
+
are unfriendly to prediction).
|
279
217
|
|
280
218
|
* It switches from double-limb calculations to single-limb
|
281
219
|
calculations half-way through, when the input numbers have been
|
282
220
|
reduced in size from two limbs to one and a half.
|
283
221
|
|
284
|
-
|
285
222
|
|
286
223
|
File: gmp.info, Node: Subquadratic GCD, Next: Extended GCD, Prev: Lehmer's Algorithm, Up: Greatest Common Divisor Algorithms
|
287
224
|
|
288
225
|
15.3.3 Subquadratic GCD
|
289
226
|
-----------------------
|
290
227
|
|
291
|
-
For inputs larger than
|
228
|
+
For inputs larger than 'GCD_DC_THRESHOLD', GCD is computed via the HGCD
|
292
229
|
(Half GCD) function, as a generalization to Lehmer's algorithm.
|
293
230
|
|
294
|
-
Let the inputs a,b be of size N limbs each.
|
231
|
+
Let the inputs a,b be of size N limbs each. Put S = floor(N/2) + 1.
|
295
232
|
Then HGCD(a,b) returns a transformation matrix T with non-negative
|
296
|
-
elements, and reduced numbers (c;d) = T
|
233
|
+
elements, and reduced numbers (c;d) = T^{-1} (a;b). The reduced numbers
|
297
234
|
c,d must be larger than S limbs, while their difference abs(c-d) must
|
298
|
-
fit in S limbs.
|
235
|
+
fit in S limbs. The matrix elements will also be of size roughly N/2.
|
299
236
|
|
300
237
|
The HGCD base case uses Lehmer's algorithm, but with the above stop
|
301
238
|
condition that returns reduced numbers and the corresponding
|
302
|
-
transformation matrix half-way through.
|
303
|
-
|
304
|
-
conquer algorithm in "On
|
305
|
-
|
239
|
+
transformation matrix half-way through. For inputs larger than
|
240
|
+
'HGCD_THRESHOLD', HGCD is computed recursively, using the divide and
|
241
|
+
conquer algorithm in "On Sch�nhage's algorithm and subquadratic integer
|
242
|
+
GCD computation" by M�ller (*note References::). The recursive
|
306
243
|
algorithm consists of these main steps.
|
307
244
|
|
308
|
-
* Call HGCD recursively, on the most significant N/2 limbs.
|
309
|
-
resulting matrix T_1 to the full numbers, reducing them to a
|
310
|
-
just above 3N/2.
|
245
|
+
* Call HGCD recursively, on the most significant N/2 limbs. Apply
|
246
|
+
the resulting matrix T_1 to the full numbers, reducing them to a
|
247
|
+
size just above 3N/2.
|
311
248
|
|
312
249
|
* Perform a small number of division or subtraction steps to reduce
|
313
|
-
the numbers to size below 3N/2.
|
250
|
+
the numbers to size below 3N/2. This is essential mainly for the
|
314
251
|
unlikely case of large quotients.
|
315
252
|
|
316
253
|
* Call HGCD recursively, on the most significant N/2 limbs of the
|
317
|
-
reduced numbers.
|
254
|
+
reduced numbers. Apply the resulting matrix T_2 to the full
|
318
255
|
numbers, reducing them to a size just above N/2.
|
319
256
|
|
320
257
|
* Compute T = T_1 T_2.
|
321
258
|
|
322
|
-
* Perform a small number of division and subtraction steps to
|
323
|
-
|
259
|
+
* Perform a small number of division and subtraction steps to satisfy
|
260
|
+
the requirements, and return.
|
324
261
|
|
325
262
|
GCD is then implemented as a loop around HGCD, similarly to Lehmer's
|
326
|
-
algorithm.
|
327
|
-
|
263
|
+
algorithm. Where Lehmer repeatedly chops off the top two limbs, calls
|
264
|
+
'mpn_hgcd2', and applies the resulting matrix to the full numbers, the
|
328
265
|
sub-quadratic GCD chops off the most significant third of the limbs (the
|
329
266
|
proportion is a tuning parameter, and 1/3 seems to be more efficient
|
330
|
-
than, e.g, 1/2), calls
|
331
|
-
Once the input numbers are reduced to size below
|
267
|
+
than, e.g, 1/2), calls 'mpn_hgcd', and applies the resulting matrix.
|
268
|
+
Once the input numbers are reduced to size below 'GCD_DC_THRESHOLD',
|
332
269
|
Lehmer's algorithm is used for the rest of the work.
|
333
270
|
|
334
271
|
The asymptotic running time of both HGCD and GCD is O(M(N)*log(N)),
|
@@ -341,23 +278,23 @@ File: gmp.info, Node: Extended GCD, Next: Jacobi Symbol, Prev: Subquadratic G
|
|
341
278
|
-------------------
|
342
279
|
|
343
280
|
The extended GCD function, or GCDEXT, calculates gcd(a,b) and also
|
344
|
-
cofactors x and y satisfying a*x+b*y=gcd(a,b).
|
345
|
-
for plain GCD are extended to handle this case.
|
346
|
-
used only for single-limb GCDEXT.
|
347
|
-
up to
|
281
|
+
cofactors x and y satisfying a*x+b*y=gcd(a,b). All the algorithms used
|
282
|
+
for plain GCD are extended to handle this case. The binary algorithm is
|
283
|
+
used only for single-limb GCDEXT. Lehmer's algorithm is used for sizes
|
284
|
+
up to 'GCDEXT_DC_THRESHOLD'. Above this threshold, GCDEXT is
|
348
285
|
implemented as a loop around HGCD, but with more book-keeping to keep
|
349
|
-
track of the cofactors.
|
286
|
+
track of the cofactors. This gives the same asymptotic running time as
|
350
287
|
for GCD and HGCD, O(M(N)*log(N))
|
351
288
|
|
352
289
|
One difference to plain GCD is that while the inputs a and b are
|
353
290
|
reduced as the algorithm proceeds, the cofactors x and y grow in size.
|
354
|
-
This makes the tuning of the chopping-point more difficult.
|
291
|
+
This makes the tuning of the chopping-point more difficult. The current
|
355
292
|
code chops off the most significant half of the inputs for the call to
|
356
|
-
HGCD in the first iteration, and the most significant two thirds for
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
293
|
+
HGCD in the first iteration, and the most significant two thirds for the
|
294
|
+
remaining calls. This strategy could surely be improved. Also the stop
|
295
|
+
condition for the loop, where Lehmer's algorithm is invoked once the
|
296
|
+
inputs are reduced below 'GCDEXT_DC_THRESHOLD', could maybe be improved
|
297
|
+
by taking into account the current size of the cofactors.
|
361
298
|
|
362
299
|
|
363
300
|
File: gmp.info, Node: Jacobi Symbol, Prev: Extended GCD, Up: Greatest Common Divisor Algorithms
|
@@ -368,20 +305,20 @@ File: gmp.info, Node: Jacobi Symbol, Prev: Extended GCD, Up: Greatest Common
|
|
368
305
|
[This section is obsolete. The current Jacobi code actually uses a very
|
369
306
|
efficient algorithm.]
|
370
307
|
|
371
|
-
|
308
|
+
'mpz_jacobi' and 'mpz_kronecker' are currently implemented with a
|
372
309
|
simple binary algorithm similar to that described for the GCDs (*note
|
373
310
|
Binary GCD::). They're not very fast when both inputs are large.
|
374
311
|
Lehmer's multi-step improvement or a binary based multi-step algorithm
|
375
312
|
is likely to be better.
|
376
313
|
|
377
314
|
When one operand fits a single limb, and that includes
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
315
|
+
'mpz_kronecker_ui' and friends, an initial reduction is done with either
|
316
|
+
'mpn_mod_1' or 'mpn_modexact_1_odd', followed by the binary algorithm on
|
317
|
+
a single limb. The binary algorithm is well suited to a single limb,
|
318
|
+
and the whole calculation in this case is quite efficient.
|
382
319
|
|
383
|
-
In all the routines sign changes for the result are accumulated
|
384
|
-
|
320
|
+
In all the routines sign changes for the result are accumulated using
|
321
|
+
some bit twiddling, avoiding table lookups or conditional jumps.
|
385
322
|
|
386
323
|
|
387
324
|
File: gmp.info, Node: Powering Algorithms, Next: Root Extraction Algorithms, Prev: Greatest Common Divisor Algorithms, Up: Algorithms
|
@@ -400,11 +337,11 @@ File: gmp.info, Node: Normal Powering Algorithm, Next: Modular Powering Algori
|
|
400
337
|
15.4.1 Normal Powering
|
401
338
|
----------------------
|
402
339
|
|
403
|
-
Normal
|
340
|
+
Normal 'mpz' or 'mpf' powering uses a simple binary algorithm,
|
404
341
|
successively squaring and then multiplying by the base when a 1 bit is
|
405
342
|
seen in the exponent, as per Knuth section 4.6.3. The "left to right"
|
406
|
-
variant described there is used rather than algorithm A, since it's
|
407
|
-
|
343
|
+
variant described there is used rather than algorithm A, since it's just
|
344
|
+
as easy and can be done with somewhat less temporary memory.
|
408
345
|
|
409
346
|
|
410
347
|
File: gmp.info, Node: Modular Powering Algorithm, Prev: Normal Powering Algorithm, Up: Powering Algorithms
|
@@ -448,8 +385,8 @@ Paul Zimmermann (*note References::).
|
|
448
385
|
|
449
386
|
An input n is split into four parts of k bits each, so with b=2^k we
|
450
387
|
have n = a3*b^3 + a2*b^2 + a1*b + a0. Part a3 must be "normalized" so
|
451
|
-
that either the high or second highest bit is set. In GMP, k is kept
|
452
|
-
|
388
|
+
that either the high or second highest bit is set. In GMP, k is kept on
|
389
|
+
a limb boundary and the input is left shifted (by an even number of
|
453
390
|
bits) to normalize.
|
454
391
|
|
455
392
|
The square root of the high two parts is taken, by recursive
|
@@ -472,14 +409,14 @@ correct or 1 too big. r is negative in the latter case, so
|
|
472
409
|
r = r + 2*s - 1
|
473
410
|
s = s - 1
|
474
411
|
|
475
|
-
The algorithm is expressed in a divide and conquer form, but as
|
476
|
-
|
477
|
-
|
478
|
-
|
412
|
+
The algorithm is expressed in a divide and conquer form, but as noted
|
413
|
+
in the paper it can also be viewed as a discrete variant of Newton's
|
414
|
+
method, or as a variation on the schoolboy method (no longer taught) for
|
415
|
+
square roots two digits at a time.
|
479
416
|
|
480
417
|
If the remainder r is not required then usually only a few high limbs
|
481
|
-
of r and u need to be calculated to determine whether an adjustment to
|
482
|
-
|
418
|
+
of r and u need to be calculated to determine whether an adjustment to s
|
419
|
+
is required. This optimization is not currently implemented.
|
483
420
|
|
484
421
|
In the Karatsuba multiplication range this algorithm is
|
485
422
|
O(1.5*M(N/2)), where M(n) is the time to multiply two numbers of n
|
@@ -488,8 +425,8 @@ O(6*M(N/2)). In practice a factor of about 1.5 to 1.8 is found in the
|
|
488
425
|
Karatsuba and Toom-3 ranges, growing to 2 or 3 in the FFT range.
|
489
426
|
|
490
427
|
The algorithm does all its calculations in integers and the resulting
|
491
|
-
|
492
|
-
precision given by
|
428
|
+
'mpn_sqrtrem' is used for both 'mpz_sqrt' and 'mpf_sqrt'. The extended
|
429
|
+
precision given by 'mpf_sqrt_ui' is obtained by padding with zero limbs.
|
493
430
|
|
494
431
|
|
495
432
|
File: gmp.info, Node: Nth Root Algorithm, Next: Perfect Square Algorithm, Prev: Square Root Algorithm, Up: Root Extraction Algorithms
|
@@ -506,10 +443,10 @@ iteration, where A is the input and n is the root to be taken.
|
|
506
443
|
|
507
444
|
The initial approximation a[1] is generated bitwise by successively
|
508
445
|
powering a trial root with or without new 1 bits, aiming to be just
|
509
|
-
above the true root. The iteration converges quadratically when
|
510
|
-
|
511
|
-
|
512
|
-
|
446
|
+
above the true root. The iteration converges quadratically when started
|
447
|
+
from a good approximation. When n is large more initial bits are needed
|
448
|
+
to get good convergence. The current implementation is not particularly
|
449
|
+
well optimized.
|
513
450
|
|
514
451
|
|
515
452
|
File: gmp.info, Node: Perfect Square Algorithm, Next: Perfect Power Algorithm, Prev: Nth Root Algorithm, Up: Root Extraction Algorithms
|
@@ -520,37 +457,37 @@ File: gmp.info, Node: Perfect Square Algorithm, Next: Perfect Power Algorithm,
|
|
520
457
|
A significant fraction of non-squares can be quickly identified by
|
521
458
|
checking whether the input is a quadratic residue modulo small integers.
|
522
459
|
|
523
|
-
|
524
|
-
just examining the low byte. Only 44 different values occur for
|
525
|
-
|
460
|
+
'mpz_perfect_square_p' first tests the input mod 256, which means
|
461
|
+
just examining the low byte. Only 44 different values occur for squares
|
462
|
+
mod 256, so 82.8% of inputs can be immediately identified as
|
526
463
|
non-squares.
|
527
464
|
|
528
|
-
On a 32-bit system similar tests are done mod 9, 5, 7, 13 and 17,
|
529
|
-
|
530
|
-
|
465
|
+
On a 32-bit system similar tests are done mod 9, 5, 7, 13 and 17, for
|
466
|
+
a total 99.25% of inputs identified as non-squares. On a 64-bit system
|
467
|
+
97 is tested too, for a total 99.62%.
|
531
468
|
|
532
469
|
These moduli are chosen because they're factors of 2^24-1 (or 2^48-1
|
533
470
|
for 64-bits), and such a remainder can be quickly taken just using
|
534
|
-
additions (see
|
471
|
+
additions (see 'mpn_mod_34lsub1').
|
535
472
|
|
536
|
-
When nails are in use moduli are instead selected by the
|
537
|
-
program and applied with an
|
473
|
+
When nails are in use moduli are instead selected by the 'gen-psqr.c'
|
474
|
+
program and applied with an 'mpn_mod_1'. The same 2^24-1 or 2^48-1
|
538
475
|
could be done with nails using some extra bit shifts, but this is not
|
539
476
|
currently implemented.
|
540
477
|
|
541
|
-
In any case each modulus is applied to the
|
542
|
-
|
543
|
-
using a "modexact" style calculation, and suitably permuted tables,
|
544
|
-
|
545
|
-
|
546
|
-
|
478
|
+
In any case each modulus is applied to the 'mpn_mod_34lsub1' or
|
479
|
+
'mpn_mod_1' remainder and a table lookup identifies non-squares. By
|
480
|
+
using a "modexact" style calculation, and suitably permuted tables, just
|
481
|
+
one multiply each is required, see the code for details. Moduli are
|
482
|
+
also combined to save operations, so long as the lookup tables don't
|
483
|
+
become too big. 'gen-psqr.c' does all the pre-calculations.
|
547
484
|
|
548
485
|
A square root must still be taken for any value that passes these
|
549
486
|
tests, to verify it's really a square and not one of the small fraction
|
550
487
|
of non-squares that get through (i.e. a pseudo-square to all the tested
|
551
488
|
bases).
|
552
489
|
|
553
|
-
Clearly more residue tests could be done,
|
490
|
+
Clearly more residue tests could be done, 'mpz_perfect_square_p' only
|
554
491
|
uses a compact and efficient set. Big inputs would probably benefit
|
555
492
|
from more residue testing, small inputs might be better off with less.
|
556
493
|
The assumed distribution of squares versus non-squares in the input
|
@@ -563,7 +500,7 @@ File: gmp.info, Node: Perfect Power Algorithm, Prev: Perfect Square Algorithm,
|
|
563
500
|
--------------------
|
564
501
|
|
565
502
|
Detecting perfect powers is required by some factorization algorithms.
|
566
|
-
Currently
|
503
|
+
Currently 'mpz_perfect_power_p' is implemented using repeated Nth root
|
567
504
|
extractions, though naturally only prime roots need to be considered.
|
568
505
|
(*Note Nth Root Algorithm::.)
|
569
506
|
|
@@ -593,11 +530,11 @@ File: gmp.info, Node: Binary to Radix, Next: Radix to Binary, Prev: Radix Con
|
|
593
530
|
15.6.1 Binary to Radix
|
594
531
|
----------------------
|
595
532
|
|
596
|
-
Conversions from binary to a power-of-2 radix use a simple and fast
|
597
|
-
|
533
|
+
Conversions from binary to a power-of-2 radix use a simple and fast O(N)
|
534
|
+
bit extraction algorithm.
|
598
535
|
|
599
536
|
Conversions from binary to other radices use one of two algorithms.
|
600
|
-
Sizes below
|
537
|
+
Sizes below 'GET_STR_PRECOMPUTE_THRESHOLD' use a basic O(N^2) method.
|
601
538
|
Repeated divisions by b^n are made, where b is the radix and n is the
|
602
539
|
biggest power that fits in a limb. But instead of simply using the
|
603
540
|
remainder r from such divisions, an extra divide step is done to give a
|
@@ -606,40 +543,40 @@ extracted using multiplications by b rather than divisions. Special
|
|
606
543
|
case code is provided for decimal, allowing multiplications by 10 to
|
607
544
|
optimize to shifts and adds.
|
608
545
|
|
609
|
-
Above
|
546
|
+
Above 'GET_STR_PRECOMPUTE_THRESHOLD' a sub-quadratic algorithm is
|
610
547
|
used. For an input t, powers b^(n*2^i) of the radix are calculated,
|
611
548
|
until a power between t and sqrt(t) is reached. t is then divided by
|
612
549
|
that largest power, giving a quotient which is the digits above that
|
613
550
|
power, and a remainder which is those below. These two parts are in
|
614
|
-
turn divided by the second highest power, and so on recursively. When
|
615
|
-
|
616
|
-
|
551
|
+
turn divided by the second highest power, and so on recursively. When a
|
552
|
+
piece has been divided down to less than 'GET_STR_DC_THRESHOLD' limbs,
|
553
|
+
the basecase algorithm described above is used.
|
617
554
|
|
618
|
-
The advantage of this algorithm is that big divisions can make use
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
555
|
+
The advantage of this algorithm is that big divisions can make use of
|
556
|
+
the sub-quadratic divide and conquer division (*note Divide and Conquer
|
557
|
+
Division::), and big divisions tend to have less overheads than lots of
|
558
|
+
separate single limb divisions anyway. But in any case the cost of
|
559
|
+
calculating the powers b^(n*2^i) must first be overcome.
|
623
560
|
|
624
|
-
|
561
|
+
'GET_STR_PRECOMPUTE_THRESHOLD' and 'GET_STR_DC_THRESHOLD' represent
|
625
562
|
the same basic thing, the point where it becomes worth doing a big
|
626
|
-
division to cut the input in half.
|
563
|
+
division to cut the input in half. 'GET_STR_PRECOMPUTE_THRESHOLD'
|
627
564
|
includes the cost of calculating the radix power required, whereas
|
628
|
-
|
565
|
+
'GET_STR_DC_THRESHOLD' assumes that's already available, which is the
|
629
566
|
case when recursing.
|
630
567
|
|
631
568
|
Since the base case produces digits from least to most significant
|
632
569
|
but they want to be stored from most to least, it's necessary to
|
633
570
|
calculate in advance how many digits there will be, or at least be sure
|
634
571
|
not to underestimate that. For GMP the number of input bits is
|
635
|
-
multiplied by
|
636
|
-
|
572
|
+
multiplied by 'chars_per_bit_exactly' from 'mp_bases', rounding up. The
|
573
|
+
result is either correct or one too big.
|
637
574
|
|
638
575
|
Examining some of the high bits of the input could increase the
|
639
576
|
chance of getting the exact number of digits, but an exact result every
|
640
577
|
time would not be practical, since in general the difference between
|
641
578
|
numbers 100... and 99... is only in the last few bits and the work to
|
642
|
-
identify 99...
|
579
|
+
identify 99... might well be almost as much as a full conversion.
|
643
580
|
|
644
581
|
The r/b^n scheme described above for using multiplications to bring
|
645
582
|
out digits might be useful for more than a single limb. Some brief
|
@@ -669,37 +606,36 @@ algorithms used before GMP 4.3.*
|
|
669
606
|
O(N) bitwise concatenation algorithm.
|
670
607
|
|
671
608
|
Conversions from other radices use one of two algorithms. Sizes
|
672
|
-
below
|
609
|
+
below 'SET_STR_PRECOMPUTE_THRESHOLD' use a basic O(N^2) method. Groups
|
673
610
|
of n digits are converted to limbs, where n is the biggest power of the
|
674
611
|
base b which will fit in a limb, then those groups are accumulated into
|
675
|
-
the result by multiplying by b^n and adding. This saves
|
676
|
-
|
677
|
-
|
678
|
-
|
612
|
+
the result by multiplying by b^n and adding. This saves multi-precision
|
613
|
+
operations, as per Knuth section 4.4 part E (*note References::). Some
|
614
|
+
special case code is provided for decimal, giving the compiler a chance
|
615
|
+
to optimize multiplications by 10.
|
679
616
|
|
680
|
-
Above
|
617
|
+
Above 'SET_STR_PRECOMPUTE_THRESHOLD' a sub-quadratic algorithm is
|
681
618
|
used. First groups of n digits are converted into limbs. Then adjacent
|
682
619
|
limbs are combined into limb pairs with x*b^n+y, where x and y are the
|
683
620
|
limbs. Adjacent limb pairs are combined into quads similarly with
|
684
|
-
x*b^(2n)+y. This continues until a single block remains, that being
|
685
|
-
|
621
|
+
x*b^(2n)+y. This continues until a single block remains, that being the
|
622
|
+
result.
|
686
623
|
|
687
624
|
The advantage of this method is that the multiplications for each x
|
688
625
|
are big blocks, allowing Karatsuba and higher algorithms to be used.
|
689
626
|
But the cost of calculating the powers b^(n*2^i) must be overcome.
|
690
|
-
|
627
|
+
'SET_STR_PRECOMPUTE_THRESHOLD' usually ends up quite big, around 5000
|
691
628
|
digits, and on some processors much bigger still.
|
692
629
|
|
693
|
-
|
630
|
+
'SET_STR_PRECOMPUTE_THRESHOLD' is based on the input digits (and
|
694
631
|
tuned for decimal), though it might be better based on a limb count, so
|
695
632
|
as to be independent of the base. But that sort of count isn't used by
|
696
633
|
the base case and so would need some sort of initial calculation or
|
697
634
|
estimate.
|
698
635
|
|
699
|
-
The main reason
|
700
|
-
|
701
|
-
|
702
|
-
or more).
|
636
|
+
The main reason 'SET_STR_PRECOMPUTE_THRESHOLD' is so much bigger than
|
637
|
+
the corresponding 'GET_STR_PRECOMPUTE_THRESHOLD' is that 'mpn_mul_1' is
|
638
|
+
much faster than 'mpn_divrem_1' (often by a factor of 5, or more).
|
703
639
|
|
704
640
|
|
705
641
|
File: gmp.info, Node: Other Algorithms, Next: Assembly Coding, Prev: Radix Conversion Algorithms, Up: Algorithms
|
@@ -722,7 +658,7 @@ File: gmp.info, Node: Prime Testing Algorithm, Next: Factorial Algorithm, Pre
|
|
722
658
|
15.7.1 Prime Testing
|
723
659
|
--------------------
|
724
660
|
|
725
|
-
The primality testing in
|
661
|
+
The primality testing in 'mpz_probab_prime_p' (*note Number Theoretic
|
726
662
|
Functions::) first does some trial division by small factors and then
|
727
663
|
uses the Miller-Rabin probabilistic primality testing algorithm, as
|
728
664
|
described in Knuth section 4.5.4 algorithm P (*note References::).
|
@@ -733,10 +669,10 @@ algorithm selects a random base x and tests whether x^q mod n is 1 or
|
|
733
669
|
prime, if not then n is definitely composite.
|
734
670
|
|
735
671
|
Any prime n will pass the test, but some composites do too. Such
|
736
|
-
composites are known as strong pseudoprimes to base x. No n is a
|
737
|
-
|
738
|
-
|
739
|
-
|
672
|
+
composites are known as strong pseudoprimes to base x. No n is a strong
|
673
|
+
pseudoprime to more than 1/4 of all bases (see Knuth exercise 22), hence
|
674
|
+
with x chosen at random there's no more than a 1/4 chance a "probable
|
675
|
+
prime" will in fact be composite.
|
740
676
|
|
741
677
|
In fact strong pseudoprimes are quite rare, making the test much more
|
742
678
|
powerful than this analysis would suggest, but 1/4 is all that's proven
|
@@ -748,23 +684,23 @@ File: gmp.info, Node: Factorial Algorithm, Next: Binomial Coefficients Algorit
|
|
748
684
|
15.7.2 Factorial
|
749
685
|
----------------
|
750
686
|
|
751
|
-
Factorials are calculated by a combination of two algorithms.
|
752
|
-
shared among them: to compute the odd part of the factorial; a final
|
687
|
+
Factorials are calculated by a combination of two algorithms. An idea
|
688
|
+
is shared among them: to compute the odd part of the factorial; a final
|
753
689
|
step takes account of the power of 2 term, by shifting.
|
754
690
|
|
755
691
|
For small n, the odd factor of n! is computed with the simple
|
756
692
|
observation that it is equal to the product of all positive odd numbers
|
757
693
|
smaller than n times the odd factor of [n/2]!, where [x] is the integer
|
758
|
-
part of x, and so on recursively.
|
694
|
+
part of x, and so on recursively. The procedure can be best illustrated
|
759
695
|
with an example,
|
760
696
|
|
761
|
-
23! = (23.21.19.17.15.13.11.9.7.5.3)(11.9.7.5.3)(5.3)2^19
|
697
|
+
23! = (23.21.19.17.15.13.11.9.7.5.3)(11.9.7.5.3)(5.3)2^{19}
|
762
698
|
|
763
699
|
Current code collects all the factors in a single list, with a loop
|
764
700
|
and no recursion, and compute the product, with no special care for
|
765
701
|
repeated chunks.
|
766
702
|
|
767
|
-
When n is larger, computation pass trough prime sieving.
|
703
|
+
When n is larger, computation pass trough prime sieving. An helper
|
768
704
|
function is used, as suggested by Peter Luschny:
|
769
705
|
|
770
706
|
n
|
@@ -773,9 +709,9 @@ function is used, as suggested by Peter Luschny:
|
|
773
709
|
msf(n) = -------------- = | | p
|
774
710
|
[n/2]!^2.2^k p=3
|
775
711
|
|
776
|
-
Where p ranges on odd prime numbers.
|
712
|
+
Where p ranges on odd prime numbers. The exponent k is chosen to
|
777
713
|
obtain an odd integer number: k is the number of 1 bits in the binary
|
778
|
-
representation of [n/2].
|
714
|
+
representation of [n/2]. The function L(p,n) can be defined as zero
|
779
715
|
when p is composite, and, for any prime p, it is computed with:
|
780
716
|
|
781
717
|
---
|
@@ -785,19 +721,19 @@ when p is composite, and, for any prime p, it is computed with:
|
|
785
721
|
i>0
|
786
722
|
|
787
723
|
With this helper function, we are able to compute the odd part of n!
|
788
|
-
using the recursion implied by n!=[n/2]!^2*msf(n)*2^k.
|
724
|
+
using the recursion implied by n!=[n/2]!^2*msf(n)*2^k. The recursion
|
789
725
|
stops using the small-n algorithm on some [n/2^i].
|
790
726
|
|
791
|
-
Both the above algorithms use binary splitting to compute the
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
|
727
|
+
Both the above algorithms use binary splitting to compute the product
|
728
|
+
of many small factors. At first as many products as possible are
|
729
|
+
accumulated in a single register, generating a list of factors that fit
|
730
|
+
in a machine word. This list is then split into halves, and the product
|
731
|
+
is computed recursively.
|
796
732
|
|
797
733
|
Such splitting is more efficient than repeated Nx1 multiplies since
|
798
734
|
it forms big multiplies, allowing Karatsuba and higher algorithms to be
|
799
|
-
used. And even below the Karatsuba threshold a big block of work can
|
800
|
-
|
735
|
+
used. And even below the Karatsuba threshold a big block of work can be
|
736
|
+
more efficient for the basecase algorithm.
|
801
737
|
|
802
738
|
|
803
739
|
File: gmp.info, Node: Binomial Coefficients Algorithm, Next: Fibonacci Numbers Algorithm, Prev: Factorial Algorithm, Up: Other Algorithms
|
@@ -816,9 +752,9 @@ product simply from i=2 to i=k.
|
|
816
752
|
It's easy to show that each denominator i will divide the product so
|
817
753
|
far, so the exact division algorithm is used (*note Exact Division::).
|
818
754
|
|
819
|
-
The numerators n-k+i and denominators i are first accumulated into
|
820
|
-
|
821
|
-
|
755
|
+
The numerators n-k+i and denominators i are first accumulated into as
|
756
|
+
many fit a limb, to save multi-precision operations, though for
|
757
|
+
'mpz_bin_ui' this applies only to the divisors, since n is an 'mpz_t'
|
822
758
|
and n-k+i in general won't fit in a limb at all.
|
823
759
|
|
824
760
|
|
@@ -827,12 +763,12 @@ File: gmp.info, Node: Fibonacci Numbers Algorithm, Next: Lucas Numbers Algorit
|
|
827
763
|
15.7.4 Fibonacci Numbers
|
828
764
|
------------------------
|
829
765
|
|
830
|
-
The Fibonacci functions
|
766
|
+
The Fibonacci functions 'mpz_fib_ui' and 'mpz_fib2_ui' are designed for
|
831
767
|
calculating isolated F[n] or F[n],F[n-1] values efficiently.
|
832
768
|
|
833
|
-
For small n, a table of single limb values in
|
834
|
-
used. On a 32-bit limb this goes up to F[47], or on a 64-bit limb up
|
835
|
-
|
769
|
+
For small n, a table of single limb values in '__gmp_fib_table' is
|
770
|
+
used. On a 32-bit limb this goes up to F[47], or on a 64-bit limb up to
|
771
|
+
F[93]. For convenience the table starts at F[-1].
|
836
772
|
|
837
773
|
Beyond the table, values are generated with a binary powering
|
838
774
|
algorithm, calculating a pair F[n] and F[n-1] working from high to low
|
@@ -855,13 +791,13 @@ be faster for only about 10 or 20 values of n, and including a block of
|
|
855
791
|
code for just those doesn't seem worthwhile. If they really mattered
|
856
792
|
it'd be better to extend the data table.
|
857
793
|
|
858
|
-
Using a table avoids lots of calculations on small numbers, and
|
859
|
-
|
860
|
-
|
861
|
-
|
862
|
-
|
794
|
+
Using a table avoids lots of calculations on small numbers, and makes
|
795
|
+
small n go fast. A bigger table would make more small n go fast, it's
|
796
|
+
just a question of balancing size against desired speed. For GMP the
|
797
|
+
code is kept compact, with the emphasis primarily on a good powering
|
798
|
+
algorithm.
|
863
799
|
|
864
|
-
|
800
|
+
'mpz_fib2_ui' returns both F[n] and F[n-1], but 'mpz_fib_ui' is only
|
865
801
|
interested in F[n]. In this case the last step of the algorithm can
|
866
802
|
become one multiply instead of two squares. One of the following two
|
867
803
|
formulas is used, according as n is odd or even.
|
@@ -871,10 +807,10 @@ formulas is used, according as n is odd or even.
|
|
871
807
|
F[2k+1] = (2F[k]+F[k-1])*(2F[k]-F[k-1]) + 2*(-1)^k
|
872
808
|
|
873
809
|
F[2k+1] here is the same as above, just rearranged to be a multiply.
|
874
|
-
For interest, the 2*(-1)^k term both here and above can be applied
|
875
|
-
|
810
|
+
For interest, the 2*(-1)^k term both here and above can be applied just
|
811
|
+
to the low limb of the calculation, without a carry or borrow into
|
876
812
|
further limbs, which saves some code size. See comments with
|
877
|
-
|
813
|
+
'mpz_fib_ui' and the internal 'mpn_fib2_ui' for how this is done.
|
878
814
|
|
879
815
|
|
880
816
|
File: gmp.info, Node: Lucas Numbers Algorithm, Next: Random Number Algorithms, Prev: Fibonacci Numbers Algorithm, Up: Other Algorithms
|
@@ -882,20 +818,20 @@ File: gmp.info, Node: Lucas Numbers Algorithm, Next: Random Number Algorithms,
|
|
882
818
|
15.7.5 Lucas Numbers
|
883
819
|
--------------------
|
884
820
|
|
885
|
-
|
821
|
+
'mpz_lucnum2_ui' derives a pair of Lucas numbers from a pair of
|
886
822
|
Fibonacci numbers with the following simple formulas.
|
887
823
|
|
888
824
|
L[k] = F[k] + 2*F[k-1]
|
889
825
|
L[k-1] = 2*F[k] - F[k-1]
|
890
826
|
|
891
|
-
|
827
|
+
'mpz_lucnum_ui' is only interested in L[n], and some work can be
|
892
828
|
saved. Trailing zero bits on n can be handled with a single square
|
893
829
|
each.
|
894
830
|
|
895
831
|
L[2k] = L[k]^2 - 2*(-1)^k
|
896
832
|
|
897
833
|
And the lowest 1 bit can be handled with one multiply of a pair of
|
898
|
-
Fibonacci numbers, similar to what
|
834
|
+
Fibonacci numbers, similar to what 'mpz_fib_ui' does.
|
899
835
|
|
900
836
|
L[2k+1] = 5*F[k-1]*(2*F[k]+F[k-1]) - 4*(-1)^k
|
901
837
|
|
@@ -905,21 +841,21 @@ File: gmp.info, Node: Random Number Algorithms, Prev: Lucas Numbers Algorithm,
|
|
905
841
|
15.7.6 Random Numbers
|
906
842
|
---------------------
|
907
843
|
|
908
|
-
For the
|
844
|
+
For the 'urandomb' functions, random numbers are generated simply by
|
909
845
|
concatenating bits produced by the generator. As long as the generator
|
910
846
|
has good randomness properties this will produce well-distributed N bit
|
911
847
|
numbers.
|
912
848
|
|
913
|
-
For the
|
849
|
+
For the 'urandomm' functions, random numbers in a range 0<=R<N are
|
914
850
|
generated by taking values R of ceil(log2(N)) bits each until one
|
915
|
-
satisfies R<N.
|
916
|
-
|
917
|
-
|
851
|
+
satisfies R<N. This will normally require only one or two attempts, but
|
852
|
+
the attempts are limited in case the generator is somehow degenerate and
|
853
|
+
produces only 1 bits or similar.
|
918
854
|
|
919
855
|
The Mersenne Twister generator is by Matsumoto and Nishimura (*note
|
920
856
|
References::). It has a non-repeating period of 2^19937-1, which is a
|
921
|
-
Mersenne prime, hence the name of the generator. The state is 624
|
922
|
-
|
857
|
+
Mersenne prime, hence the name of the generator. The state is 624 words
|
858
|
+
of 32-bits each, which is iterated with one XOR and shift for each
|
923
859
|
32-bit word generated, making the algorithm very fast. Randomness
|
924
860
|
properties are also very good and this is the default algorithm used by
|
925
861
|
GMP.
|
@@ -927,21 +863,20 @@ GMP.
|
|
927
863
|
Linear congruential generators are described in many text books, for
|
928
864
|
instance Knuth volume 2 (*note References::). With a modulus M and
|
929
865
|
parameters A and C, an integer state S is iterated by the formula S <-
|
930
|
-
A*S+C mod M.
|
866
|
+
A*S+C mod M. At each step the new state is a linear function of the
|
931
867
|
previous, mod M, hence the name of the generator.
|
932
868
|
|
933
869
|
In GMP only moduli of the form 2^N are supported, and the current
|
934
870
|
implementation is not as well optimized as it could be. Overheads are
|
935
|
-
significant when N is small, and when N is large clearly the multiply
|
936
|
-
|
871
|
+
significant when N is small, and when N is large clearly the multiply at
|
872
|
+
each step will become slow. This is not a big concern, since the
|
937
873
|
Mersenne Twister generator is better in every respect and is therefore
|
938
874
|
recommended for all normal applications.
|
939
875
|
|
940
876
|
For both generators the current state can be deduced by observing
|
941
877
|
enough output and applying some linear algebra (over GF(2) in the case
|
942
|
-
of the Mersenne Twister). This generally means raw output is
|
943
|
-
|
944
|
-
the like.
|
878
|
+
of the Mersenne Twister). This generally means raw output is unsuitable
|
879
|
+
for cryptographic applications without further hashing or the like.
|
945
880
|
|
946
881
|
|
947
882
|
File: gmp.info, Node: Assembly Coding, Prev: Other Algorithms, Up: Algorithms
|
@@ -949,14 +884,14 @@ File: gmp.info, Node: Assembly Coding, Prev: Other Algorithms, Up: Algorithms
|
|
949
884
|
15.8 Assembly Coding
|
950
885
|
====================
|
951
886
|
|
952
|
-
The assembly subroutines in GMP are the most significant source of
|
953
|
-
|
954
|
-
|
955
|
-
|
887
|
+
The assembly subroutines in GMP are the most significant source of speed
|
888
|
+
at small to moderate sizes. At larger sizes algorithm selection becomes
|
889
|
+
more important, but of course speedups in low level routines will still
|
890
|
+
speed up everything proportionally.
|
956
891
|
|
957
892
|
Carry handling and widening multiplies that are important for GMP
|
958
|
-
can't be easily expressed in C. GCC
|
959
|
-
provided in
|
893
|
+
can't be easily expressed in C. GCC 'asm' blocks help a lot and are
|
894
|
+
provided in 'longlong.h', but hand coding low level routines invariably
|
960
895
|
offers a speedup over generic C by a factor of anything from 2 to 10.
|
961
896
|
|
962
897
|
* Menu:
|
@@ -978,21 +913,21 @@ File: gmp.info, Node: Assembly Code Organisation, Next: Assembly Basics, Prev
|
|
978
913
|
15.8.1 Code Organisation
|
979
914
|
------------------------
|
980
915
|
|
981
|
-
The various
|
982
|
-
in C or assembly. The
|
916
|
+
The various 'mpn' subdirectories contain machine-dependent code, written
|
917
|
+
in C or assembly. The 'mpn/generic' subdirectory contains default code,
|
983
918
|
used when there's no machine-specific version of a particular file.
|
984
919
|
|
985
|
-
Each
|
920
|
+
Each 'mpn' subdirectory is for an ISA family. Generally 32-bit and
|
986
921
|
64-bit variants in a family cannot share code and have separate
|
987
922
|
directories. Within a family further subdirectories may exist for CPU
|
988
923
|
variants.
|
989
924
|
|
990
|
-
In each directory a
|
991
|
-
nails support for that CPU variant. A
|
925
|
+
In each directory a 'nails' subdirectory may exist, holding code with
|
926
|
+
nails support for that CPU variant. A 'NAILS_SUPPORT' directive in each
|
992
927
|
file indicates the nails values the code handles. Nails code only
|
993
928
|
exists where it's faster, or promises to be faster, than plain code.
|
994
|
-
There's no effort put into nails if they're not going to enhance a
|
995
|
-
|
929
|
+
There's no effort put into nails if they're not going to enhance a given
|
930
|
+
CPU.
|
996
931
|
|
997
932
|
|
998
933
|
File: gmp.info, Node: Assembly Basics, Next: Assembly Carry Propagation, Prev: Assembly Code Organisation, Up: Assembly Coding
|
@@ -1000,20 +935,20 @@ File: gmp.info, Node: Assembly Basics, Next: Assembly Carry Propagation, Prev
|
|
1000
935
|
15.8.2 Assembly Basics
|
1001
936
|
----------------------
|
1002
937
|
|
1003
|
-
|
938
|
+
'mpn_addmul_1' and 'mpn_submul_1' are the most important routines for
|
1004
939
|
overall GMP performance. All multiplications and divisions come down to
|
1005
|
-
repeated calls to these.
|
1006
|
-
|
940
|
+
repeated calls to these. 'mpn_add_n', 'mpn_sub_n', 'mpn_lshift' and
|
941
|
+
'mpn_rshift' are next most important.
|
1007
942
|
|
1008
943
|
On some CPUs assembly versions of the internal functions
|
1009
|
-
|
944
|
+
'mpn_mul_basecase' and 'mpn_sqr_basecase' give significant speedups,
|
1010
945
|
mainly through avoiding function call overheads. They can also
|
1011
946
|
potentially make better use of a wide superscalar processor, as can
|
1012
|
-
bigger primitives like
|
947
|
+
bigger primitives like 'mpn_addmul_2' or 'mpn_addmul_4'.
|
1013
948
|
|
1014
949
|
The restrictions on overlaps between sources and destinations (*note
|
1015
950
|
Low-level Functions::) are designed to facilitate a variety of
|
1016
|
-
implementations. For example, knowing
|
951
|
+
implementations. For example, knowing 'mpn_add_n' won't have partly
|
1017
952
|
overlapping sources and destination means reading can be done far ahead
|
1018
953
|
of writing on superscalar processors, and loops can be vectorized on a
|
1019
954
|
vector processor, depending on the carry handling.
|
@@ -1025,35 +960,33 @@ File: gmp.info, Node: Assembly Carry Propagation, Next: Assembly Cache Handlin
|
|
1025
960
|
------------------------
|
1026
961
|
|
1027
962
|
The problem that presents most challenges in GMP is propagating carries
|
1028
|
-
from one limb to the next. In functions like
|
1029
|
-
|
963
|
+
from one limb to the next. In functions like 'mpn_addmul_1' and
|
964
|
+
'mpn_add_n', carries are the only dependencies between limb operations.
|
1030
965
|
|
1031
|
-
On processors with carry flags, a straightforward CISC style
|
1032
|
-
generally best. AMD K6
|
966
|
+
On processors with carry flags, a straightforward CISC style 'adc' is
|
967
|
+
generally best. AMD K6 'mpn_addmul_1' however is an example of an
|
1033
968
|
unusual set of circumstances where a branch works out better.
|
1034
969
|
|
1035
|
-
On RISC processors generally an add and compare for overflow is
|
1036
|
-
|
1037
|
-
|
1038
|
-
|
1039
|
-
|
1040
|
-
|
1041
|
-
each limb.
|
970
|
+
On RISC processors generally an add and compare for overflow is used.
|
971
|
+
This sort of thing can be seen in 'mpn/generic/aors_n.c'. Some carry
|
972
|
+
propagation schemes require 4 instructions, meaning at least 4 cycles
|
973
|
+
per limb, but other schemes may use just 1 or 2. On wide superscalar
|
974
|
+
processors performance may be completely determined by the number of
|
975
|
+
dependent instructions between carry-in and carry-out for each limb.
|
1042
976
|
|
1043
977
|
On vector processors good use can be made of the fact that a carry
|
1044
978
|
bit only very rarely propagates more than one limb. When adding a
|
1045
979
|
single bit to a limb, there's only a carry out if that limb was
|
1046
|
-
|
1047
|
-
|
1048
|
-
|
1049
|
-
|
1050
|
-
|
1051
|
-
On the x86s, GCC (as of version 2.95.2) doesn't generate
|
1052
|
-
|
1053
|
-
|
1054
|
-
|
1055
|
-
|
1056
|
-
results.
|
980
|
+
'0xFF...FF' which on random data will be only 1 in 2^mp_bits_per_limb.
|
981
|
+
'mpn/cray/add_n.c' is an example of this, it adds all limbs in parallel,
|
982
|
+
adds one set of carry bits in parallel and then only rarely needs to
|
983
|
+
fall through to a loop propagating further carries.
|
984
|
+
|
985
|
+
On the x86s, GCC (as of version 2.95.2) doesn't generate particularly
|
986
|
+
good code for the RISC style idioms that are necessary to handle carry
|
987
|
+
bits in C. Often conditional jumps are generated where 'adc' or 'sbb'
|
988
|
+
forms would be better. And so unfortunately almost any loop involving
|
989
|
+
carry bits needs to be coded in assembly for best results.
|
1057
990
|
|
1058
991
|
|
1059
992
|
File: gmp.info, Node: Assembly Cache Handling, Next: Assembly Functional Units, Prev: Assembly Carry Propagation, Up: Assembly Coding
|
@@ -1064,19 +997,19 @@ File: gmp.info, Node: Assembly Cache Handling, Next: Assembly Functional Units
|
|
1064
997
|
GMP aims to perform well both on operands that fit entirely in L1 cache
|
1065
998
|
and those which don't.
|
1066
999
|
|
1067
|
-
Basic routines like
|
1000
|
+
Basic routines like 'mpn_add_n' or 'mpn_lshift' are often used on
|
1068
1001
|
large operands, so L2 and main memory performance is important for them.
|
1069
|
-
|
1002
|
+
'mpn_mul_1' and 'mpn_addmul_1' are mostly used for multiply and square
|
1070
1003
|
basecases, so L1 performance matters most for them, unless assembly
|
1071
|
-
versions of
|
1004
|
+
versions of 'mpn_mul_basecase' and 'mpn_sqr_basecase' exist, in which
|
1072
1005
|
case the remaining uses are mostly for larger operands.
|
1073
1006
|
|
1074
1007
|
For L2 or main memory operands, memory access times will almost
|
1075
1008
|
certainly be more than the calculation time. The aim therefore is to
|
1076
1009
|
maximize memory throughput, by starting a load of the next cache line
|
1077
|
-
while processing the contents of the previous one. Clearly this is
|
1078
|
-
|
1079
|
-
|
1010
|
+
while processing the contents of the previous one. Clearly this is only
|
1011
|
+
possible if the chip has a lock-up free cache or some sort of prefetch
|
1012
|
+
instruction. Most current chips have both these features.
|
1080
1013
|
|
1081
1014
|
Prefetching sources combines well with loop unrolling, since a
|
1082
1015
|
prefetch can be initiated once per unrolled loop (or more than once if
|
@@ -1085,16 +1018,16 @@ the loop covers more than one cache line).
|
|
1085
1018
|
On CPUs without write-allocate caches, prefetching destinations will
|
1086
1019
|
ensure individual stores don't go further down the cache hierarchy,
|
1087
1020
|
limiting bandwidth. Of course for calculations which are slow anyway,
|
1088
|
-
like
|
1021
|
+
like 'mpn_divrem_1', write-throughs might be fine.
|
1089
1022
|
|
1090
1023
|
The distance ahead to prefetch will be determined by memory latency
|
1091
1024
|
versus throughput. The aim of course is to have data arriving
|
1092
1025
|
continuously, at peak throughput. Some CPUs have limits on the number
|
1093
1026
|
of fetches or prefetches in progress.
|
1094
1027
|
|
1095
|
-
If a special prefetch instruction doesn't exist then a plain load
|
1096
|
-
|
1097
|
-
|
1028
|
+
If a special prefetch instruction doesn't exist then a plain load can
|
1029
|
+
be used, but in that case care must be taken not to attempt to read past
|
1030
|
+
the end of an operand, since that might produce a segmentation
|
1098
1031
|
violation.
|
1099
1032
|
|
1100
1033
|
Some CPUs or systems have hardware that detects sequential memory
|
@@ -1115,18 +1048,18 @@ accommodate available resources.
|
|
1115
1048
|
Loop control will generally require a counter and pointer updates,
|
1116
1049
|
costing as much as 5 instructions, plus any delays a branch introduces.
|
1117
1050
|
CPU addressing modes might reduce pointer updates, perhaps by allowing
|
1118
|
-
just one updating pointer and others expressed as offsets from it, or
|
1119
|
-
|
1120
|
-
|
1051
|
+
just one updating pointer and others expressed as offsets from it, or on
|
1052
|
+
CISC chips with all addressing done with the loop counter as a scaled
|
1053
|
+
index.
|
1121
1054
|
|
1122
1055
|
The final loop control cost can be amortised by processing several
|
1123
1056
|
limbs in each iteration (*note Assembly Loop Unrolling::). This at
|
1124
1057
|
least ensures loop control isn't a big fraction the work done.
|
1125
1058
|
|
1126
|
-
Memory throughput is always a limit. If perhaps only one load or
|
1127
|
-
|
1128
|
-
|
1129
|
-
|
1059
|
+
Memory throughput is always a limit. If perhaps only one load or one
|
1060
|
+
store can be done per cycle then 3 cycles/limb will the top speed for
|
1061
|
+
"binary" operations like 'mpn_add_n', and any code achieving that is
|
1062
|
+
optimal.
|
1130
1063
|
|
1131
1064
|
Integer resources can be freed up by having the loop counter in a
|
1132
1065
|
float register, or by pressing the float units into use for some
|
@@ -1144,33 +1077,33 @@ File: gmp.info, Node: Assembly Floating Point, Next: Assembly SIMD Instruction
|
|
1144
1077
|
---------------------
|
1145
1078
|
|
1146
1079
|
Floating point arithmetic is used in GMP for multiplications on CPUs
|
1147
|
-
with poor integer multipliers. It's mostly useful for
|
1148
|
-
|
1149
|
-
|
1080
|
+
with poor integer multipliers. It's mostly useful for 'mpn_mul_1',
|
1081
|
+
'mpn_addmul_1' and 'mpn_submul_1' on 64-bit machines, and
|
1082
|
+
'mpn_mul_basecase' on both 32-bit and 64-bit machines.
|
1150
1083
|
|
1151
1084
|
With IEEE 53-bit double precision floats, integer multiplications
|
1152
1085
|
producing up to 53 bits will give exact results. Breaking a 64x64
|
1153
|
-
multiplication into eight 16x32->48 bit pieces is convenient. With
|
1154
|
-
|
1155
|
-
|
1086
|
+
multiplication into eight 16x32->48 bit pieces is convenient. With some
|
1087
|
+
care though six 21x32->53 bit products can be used, if one of the lower
|
1088
|
+
two 21-bit pieces also uses the sign bit.
|
1156
1089
|
|
1157
|
-
For the
|
1158
|
-
invariant single limb is split at the start, into 3 or 4 pieces.
|
1159
|
-
|
1090
|
+
For the 'mpn_mul_1' family of functions on a 64-bit machine, the
|
1091
|
+
invariant single limb is split at the start, into 3 or 4 pieces. Inside
|
1092
|
+
the loop, the bignum operand is split into 32-bit pieces. Fast
|
1160
1093
|
conversion of these unsigned 32-bit pieces to floating point is highly
|
1161
1094
|
machine-dependent. In some cases, reading the data into the integer
|
1162
|
-
unit, zero-extending to 64-bits, then transferring to the floating
|
1163
|
-
|
1095
|
+
unit, zero-extending to 64-bits, then transferring to the floating point
|
1096
|
+
unit back via memory is the only option.
|
1164
1097
|
|
1165
|
-
Converting partial products back to 64-bit limbs is usually best
|
1166
|
-
|
1167
|
-
|
1098
|
+
Converting partial products back to 64-bit limbs is usually best done
|
1099
|
+
as a signed conversion. Since all values are smaller than 2^53, signed
|
1100
|
+
and unsigned are the same, but most processors lack unsigned
|
1168
1101
|
conversions.
|
1169
1102
|
|
1170
1103
|
|
1171
1104
|
|
1172
|
-
Here is a diagram showing 16x32 bit products for an
|
1173
|
-
|
1105
|
+
Here is a diagram showing 16x32 bit products for an 'mpn_mul_1' or
|
1106
|
+
'mpn_addmul_1' with a 64-bit limb. The single limb operand V is split
|
1174
1107
|
into four 16-bit parts. The multi-limb operand U is split in the loop
|
1175
1108
|
into two 32-bit parts.
|
1176
1109
|
|
@@ -1209,9 +1142,9 @@ into two 32-bit parts.
|
|
1209
1142
|
| u32 x v48 | r80
|
1210
1143
|
+-----------+
|
1211
1144
|
|
1212
|
-
p32 and r32 can be summed using floating-point addition, and
|
1213
|
-
|
1214
|
-
|
1145
|
+
p32 and r32 can be summed using floating-point addition, and likewise
|
1146
|
+
p48 and r48. p00 and p16 can be summed with r64 and r80 from the
|
1147
|
+
previous iteration.
|
1215
1148
|
|
1216
1149
|
For each loop then, four 49-bit quantities are transferred to the
|
1217
1150
|
integer unit, aligned as follows,
|
@@ -1247,13 +1180,13 @@ for propagating the sort of carries that arise in GMP.
|
|
1247
1180
|
|
1248
1181
|
SIMD multiplications of say four 16x16 bit multiplies only do as much
|
1249
1182
|
work as one 32x32 from GMP's point of view, and need some shifts and
|
1250
|
-
adds besides. But of course if say the SIMD form is fully pipelined
|
1251
|
-
|
1183
|
+
adds besides. But of course if say the SIMD form is fully pipelined and
|
1184
|
+
uses less instruction decoding then it may still be worthwhile.
|
1252
1185
|
|
1253
|
-
On the x86 chips, MMX has so far found a use in
|
1254
|
-
|
1255
|
-
the P55
|
1256
|
-
|
1186
|
+
On the x86 chips, MMX has so far found a use in 'mpn_rshift' and
|
1187
|
+
'mpn_lshift', and is used in a special case for 16-bit multipliers in
|
1188
|
+
the P55 'mpn_mul_1'. SSE2 is used for Pentium 4 'mpn_mul_1',
|
1189
|
+
'mpn_addmul_1', and 'mpn_submul_1'.
|
1257
1190
|
|
1258
1191
|
|
1259
1192
|
File: gmp.info, Node: Assembly Software Pipelining, Next: Assembly Loop Unrolling, Prev: Assembly SIMD Instructions, Up: Assembly Coding
|
@@ -1263,8 +1196,8 @@ File: gmp.info, Node: Assembly Software Pipelining, Next: Assembly Loop Unroll
|
|
1263
1196
|
|
1264
1197
|
Software pipelining consists of scheduling instructions around the
|
1265
1198
|
branch point in a loop. For example a loop might issue a load not for
|
1266
|
-
use in the present iteration but the next, thereby allowing extra
|
1267
|
-
|
1199
|
+
use in the present iteration but the next, thereby allowing extra cycles
|
1200
|
+
for the data to arrive from memory.
|
1268
1201
|
|
1269
1202
|
Naturally this is wanted only when doing things like loads or
|
1270
1203
|
multiplies that take several cycles to complete, and only where a CPU
|
@@ -1275,10 +1208,10 @@ meantime.
|
|
1275
1208
|
each stage and each loop iteration moves them along one stage. This is
|
1276
1209
|
like juggling.
|
1277
1210
|
|
1278
|
-
If the latency of some instruction is greater than the loop time
|
1279
|
-
|
1280
|
-
|
1281
|
-
|
1211
|
+
If the latency of some instruction is greater than the loop time then
|
1212
|
+
it will be necessary to unroll, so one register has a result ready to
|
1213
|
+
use while another (or multiple others) are still in progress. (*note
|
1214
|
+
Assembly Loop Unrolling::).
|
1282
1215
|
|
1283
1216
|
|
1284
1217
|
File: gmp.info, Node: Assembly Loop Unrolling, Next: Assembly Writing Guide, Prev: Assembly Software Pipelining, Up: Assembly Coding
|
@@ -1290,32 +1223,32 @@ Loop unrolling consists of replicating code so that several limbs are
|
|
1290
1223
|
processed in each loop. At a minimum this reduces loop overheads by a
|
1291
1224
|
corresponding factor, but it can also allow better register usage, for
|
1292
1225
|
example alternately using one register combination and then another.
|
1293
|
-
Judicious use of
|
1226
|
+
Judicious use of 'm4' macros can help avoid lots of duplication in the
|
1294
1227
|
source code.
|
1295
1228
|
|
1296
1229
|
Any amount of unrolling can be handled with a loop counter that's
|
1297
1230
|
decremented by N each time, stopping when the remaining count is less
|
1298
1231
|
than the further N the loop will process. Or by subtracting N at the
|
1299
|
-
start, the termination condition becomes when the counter C is less
|
1300
|
-
|
1232
|
+
start, the termination condition becomes when the counter C is less than
|
1233
|
+
0 (and the count of remaining limbs is C+N).
|
1301
1234
|
|
1302
1235
|
Alternately for a power of 2 unroll the loop count and remainder can
|
1303
|
-
be established with a shift and mask. This is convenient if also
|
1304
|
-
|
1236
|
+
be established with a shift and mask. This is convenient if also making
|
1237
|
+
a computed jump into the middle of a large loop.
|
1305
1238
|
|
1306
1239
|
The limbs not a multiple of the unrolling can be handled in various
|
1307
1240
|
ways, for example
|
1308
1241
|
|
1309
1242
|
* A simple loop at the end (or the start) to process the excess.
|
1310
|
-
Care will be wanted that it isn't too much slower than the
|
1311
|
-
|
1243
|
+
Care will be wanted that it isn't too much slower than the unrolled
|
1244
|
+
part.
|
1312
1245
|
|
1313
1246
|
* A set of binary tests, for example after an 8-limb unrolling, test
|
1314
1247
|
for 4 more limbs to process, then a further 2 more or not, and
|
1315
1248
|
finally 1 more or not. This will probably take more code space
|
1316
1249
|
than a simple loop.
|
1317
1250
|
|
1318
|
-
* A
|
1251
|
+
* A 'switch' statement, providing separate code for each possible
|
1319
1252
|
excess, for example an 8-limb unrolling would have separate code
|
1320
1253
|
for 0 remaining, 1 remaining, etc, up to 7 remaining. This might
|
1321
1254
|
take a lot of code, but may be the best way to optimize all cases
|
@@ -1342,9 +1275,9 @@ Code it without unrolling or scheduling, to make sure it works. On a
|
|
1342
1275
|
greatly simplify later steps.
|
1343
1276
|
|
1344
1277
|
Then note for each instruction the functional unit and/or issue port
|
1345
|
-
requirements. If an instruction can use either of two units, like U0
|
1346
|
-
|
1347
|
-
|
1278
|
+
requirements. If an instruction can use either of two units, like U0 or
|
1279
|
+
U1 then make a category "U0/U1". Count the total using each unit (or
|
1280
|
+
combined unit), and count all instructions.
|
1348
1281
|
|
1349
1282
|
Figure out from those counts the best possible loop time. The goal
|
1350
1283
|
will be to find a perfect schedule where instruction latencies are
|
@@ -1352,20 +1285,20 @@ completely hidden. The total instruction count might be the limiting
|
|
1352
1285
|
factor, or perhaps a particular functional unit. It might be possible
|
1353
1286
|
to tweak the instructions to help the limiting factor.
|
1354
1287
|
|
1355
|
-
Suppose the loop time is N, then make N issue buckets, with the
|
1356
|
-
|
1357
|
-
|
1358
|
-
|
1288
|
+
Suppose the loop time is N, then make N issue buckets, with the final
|
1289
|
+
loop branch at the end of the last. Now fill the buckets with dummy
|
1290
|
+
instructions using the functional units desired. Run this to make sure
|
1291
|
+
the intended speed is reached.
|
1359
1292
|
|
1360
1293
|
Now replace the dummy instructions with the real instructions from
|
1361
|
-
the slow but correct loop you started with. The first will typically
|
1362
|
-
|
1363
|
-
|
1364
|
-
|
1294
|
+
the slow but correct loop you started with. The first will typically be
|
1295
|
+
a load instruction. Then the instruction using that value is placed in
|
1296
|
+
a bucket an appropriate distance down. Run the loop again, to check it
|
1297
|
+
still runs at target speed.
|
1365
1298
|
|
1366
1299
|
Keep placing instructions, frequently measuring the loop. After a
|
1367
|
-
few you will need to wrap around from the last bucket back to the top
|
1368
|
-
|
1300
|
+
few you will need to wrap around from the last bucket back to the top of
|
1301
|
+
the loop. If you used the new-register for new-value strategy above
|
1369
1302
|
then there will be no register conflicts. If not then take care not to
|
1370
1303
|
clobber something already in use. Changing registers at this time is
|
1371
1304
|
very error prone.
|
@@ -1381,8 +1314,8 @@ start and delete those instructions which don't have valid antecedents,
|
|
1381
1314
|
and at the end replicate and delete those whose results are unwanted
|
1382
1315
|
(including any further loads).
|
1383
1316
|
|
1384
|
-
The loop will have a minimum number of limbs loaded and processed,
|
1385
|
-
|
1317
|
+
The loop will have a minimum number of limbs loaded and processed, so
|
1318
|
+
the feed-in code must test if the request size is smaller and skip
|
1386
1319
|
either to a suitable part of the wind-down or to special code for small
|
1387
1320
|
sizes.
|
1388
1321
|
|
@@ -1411,49 +1344,49 @@ File: gmp.info, Node: Integer Internals, Next: Rational Internals, Prev: Inte
|
|
1411
1344
|
16.1 Integer Internals
|
1412
1345
|
======================
|
1413
1346
|
|
1414
|
-
|
1347
|
+
'mpz_t' variables represent integers using sign and magnitude, in space
|
1415
1348
|
dynamically allocated and reallocated. The fields are as follows.
|
1416
1349
|
|
1417
|
-
|
1350
|
+
'_mp_size'
|
1418
1351
|
The number of limbs, or the negative of that when representing a
|
1419
|
-
negative integer. Zero is represented by
|
1420
|
-
in which case the
|
1352
|
+
negative integer. Zero is represented by '_mp_size' set to zero,
|
1353
|
+
in which case the '_mp_d' data is unused.
|
1421
1354
|
|
1422
|
-
|
1355
|
+
'_mp_d'
|
1423
1356
|
A pointer to an array of limbs which is the magnitude. These are
|
1424
|
-
stored "little endian" as per the
|
1425
|
-
|
1426
|
-
|
1427
|
-
|
1357
|
+
stored "little endian" as per the 'mpn' functions, so '_mp_d[0]' is
|
1358
|
+
the least significant limb and '_mp_d[ABS(_mp_size)-1]' is the most
|
1359
|
+
significant. Whenever '_mp_size' is non-zero, the most significant
|
1360
|
+
limb is non-zero.
|
1428
1361
|
|
1429
1362
|
Currently there's always at least one limb allocated, so for
|
1430
|
-
instance
|
1431
|
-
can fetch
|
1432
|
-
|
1433
|
-
|
1434
|
-
|
1435
|
-
|
1436
|
-
and naturally
|
1437
|
-
is about to (or might be about to) increase
|
1438
|
-
|
1439
|
-
|
1440
|
-
|
1441
|
-
The various bitwise logical functions like
|
1363
|
+
instance 'mpz_set_ui' never needs to reallocate, and 'mpz_get_ui'
|
1364
|
+
can fetch '_mp_d[0]' unconditionally (though its value is then only
|
1365
|
+
wanted if '_mp_size' is non-zero).
|
1366
|
+
|
1367
|
+
'_mp_alloc'
|
1368
|
+
'_mp_alloc' is the number of limbs currently allocated at '_mp_d',
|
1369
|
+
and naturally '_mp_alloc >= ABS(_mp_size)'. When an 'mpz' routine
|
1370
|
+
is about to (or might be about to) increase '_mp_size', it checks
|
1371
|
+
'_mp_alloc' to see whether there's enough space, and reallocates if
|
1372
|
+
not. 'MPZ_REALLOC' is generally used for this.
|
1373
|
+
|
1374
|
+
The various bitwise logical functions like 'mpz_and' behave as if
|
1442
1375
|
negative values were twos complement. But sign and magnitude is always
|
1443
1376
|
used internally, and necessary adjustments are made during the
|
1444
1377
|
calculations. Sometimes this isn't pretty, but sign and magnitude are
|
1445
1378
|
best for other routines.
|
1446
1379
|
|
1447
|
-
Some internal temporary variables are setup with
|
1448
|
-
these have
|
1449
|
-
memory allocation functions. Care is taken to ensure that these are
|
1450
|
-
|
1380
|
+
Some internal temporary variables are setup with 'MPZ_TMP_INIT' and
|
1381
|
+
these have '_mp_d' space obtained from 'TMP_ALLOC' rather than the
|
1382
|
+
memory allocation functions. Care is taken to ensure that these are big
|
1383
|
+
enough that no reallocation is necessary (since it would have
|
1451
1384
|
unpredictable consequences).
|
1452
1385
|
|
1453
|
-
|
1454
|
-
|
1455
|
-
|
1456
|
-
|
1386
|
+
'_mp_size' and '_mp_alloc' are 'int', although 'mp_size_t' is usually
|
1387
|
+
a 'long'. This is done to make the fields just 32 bits on some 64 bits
|
1388
|
+
systems, thereby saving a few bytes of data space but still providing
|
1389
|
+
plenty of range.
|
1457
1390
|
|
1458
1391
|
|
1459
1392
|
File: gmp.info, Node: Rational Internals, Next: Float Internals, Prev: Integer Internals, Up: Internals
|
@@ -1461,26 +1394,26 @@ File: gmp.info, Node: Rational Internals, Next: Float Internals, Prev: Intege
|
|
1461
1394
|
16.2 Rational Internals
|
1462
1395
|
=======================
|
1463
1396
|
|
1464
|
-
|
1397
|
+
'mpq_t' variables represent rationals using an 'mpz_t' numerator and
|
1465
1398
|
denominator (*note Integer Internals::).
|
1466
1399
|
|
1467
|
-
The canonical form adopted is denominator positive (and non-zero),
|
1468
|
-
|
1400
|
+
The canonical form adopted is denominator positive (and non-zero), no
|
1401
|
+
common factors between numerator and denominator, and zero uniquely
|
1469
1402
|
represented as 0/1.
|
1470
1403
|
|
1471
1404
|
It's believed that casting out common factors at each stage of a
|
1472
1405
|
calculation is best in general. A GCD is an O(N^2) operation so it's
|
1473
|
-
better to do a few small ones immediately than to delay and have to do
|
1474
|
-
|
1475
|
-
factors can be used for example in
|
1476
|
-
|
1406
|
+
better to do a few small ones immediately than to delay and have to do a
|
1407
|
+
big one later. Knowing the numerator and denominator have no common
|
1408
|
+
factors can be used for example in 'mpq_mul' to make only two cross GCDs
|
1409
|
+
necessary, not four.
|
1477
1410
|
|
1478
1411
|
This general approach to common factors is badly sub-optimal in the
|
1479
1412
|
presence of simple factorizations or little prospect for cancellation,
|
1480
|
-
but GMP has no way to know when this will occur. As per *
|
1481
|
-
Efficiency::, that's left to applications. The
|
1482
|
-
still suit, with
|
1483
|
-
numerator and denominator, or of course
|
1413
|
+
but GMP has no way to know when this will occur. As per *note
|
1414
|
+
Efficiency::, that's left to applications. The 'mpq_t' framework might
|
1415
|
+
still suit, with 'mpq_numref' and 'mpq_denref' for direct access to the
|
1416
|
+
numerator and denominator, or of course 'mpz_t' variables can be used
|
1484
1417
|
directly.
|
1485
1418
|
|
1486
1419
|
|
@@ -1492,7 +1425,7 @@ File: gmp.info, Node: Float Internals, Next: Raw Output Internals, Prev: Rati
|
|
1492
1425
|
Efficient calculation is the primary aim of GMP floats and the use of
|
1493
1426
|
whole limbs and simple rounding facilitates this.
|
1494
1427
|
|
1495
|
-
|
1428
|
+
'mpf_t' floats have a variable precision mantissa and a single
|
1496
1429
|
machine word signed exponent. The mantissa is represented using sign
|
1497
1430
|
and magnitude.
|
1498
1431
|
|
@@ -1508,35 +1441,36 @@ and magnitude.
|
|
1508
1441
|
|
1509
1442
|
<-------- _mp_size --------->
|
1510
1443
|
|
1444
|
+
|
1511
1445
|
The fields are as follows.
|
1512
1446
|
|
1513
|
-
|
1447
|
+
'_mp_size'
|
1514
1448
|
The number of limbs currently in use, or the negative of that when
|
1515
|
-
representing a negative value. Zero is represented by
|
1516
|
-
and
|
1517
|
-
is unused. (In the future
|
1449
|
+
representing a negative value. Zero is represented by '_mp_size'
|
1450
|
+
and '_mp_exp' both set to zero, and in that case the '_mp_d' data
|
1451
|
+
is unused. (In the future '_mp_exp' might be undefined when
|
1518
1452
|
representing zero.)
|
1519
1453
|
|
1520
|
-
|
1454
|
+
'_mp_prec'
|
1521
1455
|
The precision of the mantissa, in limbs. In any calculation the
|
1522
|
-
aim is to produce
|
1456
|
+
aim is to produce '_mp_prec' limbs of result (the most significant
|
1523
1457
|
being non-zero).
|
1524
1458
|
|
1525
|
-
|
1459
|
+
'_mp_d'
|
1526
1460
|
A pointer to the array of limbs which is the absolute value of the
|
1527
|
-
mantissa. These are stored "little endian" as per the
|
1528
|
-
functions, so
|
1529
|
-
|
1461
|
+
mantissa. These are stored "little endian" as per the 'mpn'
|
1462
|
+
functions, so '_mp_d[0]' is the least significant limb and
|
1463
|
+
'_mp_d[ABS(_mp_size)-1]' the most significant.
|
1530
1464
|
|
1531
1465
|
The most significant limb is always non-zero, but there are no
|
1532
1466
|
other restrictions on its value, in particular the highest 1 bit
|
1533
1467
|
can be anywhere within the limb.
|
1534
1468
|
|
1535
|
-
|
1469
|
+
'_mp_prec+1' limbs are allocated to '_mp_d', the extra limb being
|
1536
1470
|
for convenience (see below). There are no reallocations during a
|
1537
|
-
calculation, only in a change of precision with
|
1471
|
+
calculation, only in a change of precision with 'mpf_set_prec'.
|
1538
1472
|
|
1539
|
-
|
1473
|
+
'_mp_exp'
|
1540
1474
|
The exponent, in limbs, determining the location of the implied
|
1541
1475
|
radix point. Zero means the radix point is just above the most
|
1542
1476
|
significant limb. Positive values mean a radix point offset
|
@@ -1547,11 +1481,11 @@ The fields are as follows.
|
|
1547
1481
|
Naturally the exponent can be any value, it doesn't have to fall
|
1548
1482
|
within the limbs as the diagram shows, it can be a long way above
|
1549
1483
|
or a long way below. Limbs other than those included in the
|
1550
|
-
|
1484
|
+
'{_mp_d,_mp_size}' data are treated as zero.
|
1551
1485
|
|
1552
|
-
The
|
1553
|
-
|
1554
|
-
|
1486
|
+
The '_mp_size' and '_mp_prec' fields are 'int', although the
|
1487
|
+
'mp_size_t' type is usually a 'long'. The '_mp_exp' field is usually
|
1488
|
+
'long'. This is done to make some fields just 32 bits on some 64 bits
|
1555
1489
|
systems, thereby saving a few bytes of data space but still providing
|
1556
1490
|
plenty of precision and a very large range.
|
1557
1491
|
|
@@ -1559,92 +1493,89 @@ plenty of precision and a very large range.
|
|
1559
1493
|
The following various points should be noted.
|
1560
1494
|
|
1561
1495
|
Low Zeros
|
1562
|
-
The least significant limbs
|
1563
|
-
|
1564
|
-
|
1565
|
-
|
1566
|
-
aren't checked.
|
1496
|
+
The least significant limbs '_mp_d[0]' etc can be zero, though such
|
1497
|
+
low zeros can always be ignored. Routines likely to produce low
|
1498
|
+
zeros check and avoid them to save time in subsequent calculations,
|
1499
|
+
but for most routines they're quite unlikely and aren't checked.
|
1567
1500
|
|
1568
1501
|
Mantissa Size Range
|
1569
|
-
The
|
1502
|
+
The '_mp_size' count of limbs in use can be less than '_mp_prec' if
|
1570
1503
|
the value can be represented in less. This means low precision
|
1571
|
-
values or small integers stored in a high precision
|
1504
|
+
values or small integers stored in a high precision 'mpf_t' can
|
1572
1505
|
still be operated on efficiently.
|
1573
1506
|
|
1574
|
-
|
1575
|
-
allowed to use all of the
|
1576
|
-
and secondly when
|
1577
|
-
|
1578
|
-
|
1507
|
+
'_mp_size' can also be greater than '_mp_prec'. Firstly a value is
|
1508
|
+
allowed to use all of the '_mp_prec+1' limbs available at '_mp_d',
|
1509
|
+
and secondly when 'mpf_set_prec_raw' lowers '_mp_prec' it leaves
|
1510
|
+
'_mp_size' unchanged and so the size can be arbitrarily bigger than
|
1511
|
+
'_mp_prec'.
|
1579
1512
|
|
1580
1513
|
Rounding
|
1581
|
-
All rounding is done on limb boundaries. Calculating
|
1514
|
+
All rounding is done on limb boundaries. Calculating '_mp_prec'
|
1582
1515
|
limbs with the high non-zero will ensure the application requested
|
1583
1516
|
minimum precision is obtained.
|
1584
1517
|
|
1585
|
-
The use of simple "trunc" rounding towards zero is efficient,
|
1586
|
-
|
1587
|
-
decrement.
|
1518
|
+
The use of simple "trunc" rounding towards zero is efficient, since
|
1519
|
+
there's no need to examine extra limbs and increment or decrement.
|
1588
1520
|
|
1589
1521
|
Bit Shifts
|
1590
1522
|
Since the exponent is in limbs, there are no bit shifts in basic
|
1591
|
-
operations like
|
1523
|
+
operations like 'mpf_add' and 'mpf_mul'. When differing exponents
|
1592
1524
|
are encountered all that's needed is to adjust pointers to line up
|
1593
1525
|
the relevant limbs.
|
1594
1526
|
|
1595
|
-
Of course
|
1527
|
+
Of course 'mpf_mul_2exp' and 'mpf_div_2exp' will require bit
|
1596
1528
|
shifts, but the choice is between an exponent in limbs which
|
1597
1529
|
requires shifts there, or one in bits which requires them almost
|
1598
1530
|
everywhere else.
|
1599
1531
|
|
1600
|
-
Use of
|
1601
|
-
The extra limb on
|
1602
|
-
|
1603
|
-
operation.
|
1604
|
-
|
1532
|
+
Use of '_mp_prec+1' Limbs
|
1533
|
+
The extra limb on '_mp_d' ('_mp_prec+1' rather than just
|
1534
|
+
'_mp_prec') helps when an 'mpf' routine might get a carry from its
|
1535
|
+
operation. 'mpf_add' for instance will do an 'mpn_add' of
|
1536
|
+
'_mp_prec' limbs. If there's no carry then that's the result, but
|
1605
1537
|
if there is a carry then it's stored in the extra limb of space and
|
1606
|
-
|
1538
|
+
'_mp_size' becomes '_mp_prec+1'.
|
1607
1539
|
|
1608
|
-
Whenever
|
1609
|
-
|
1540
|
+
Whenever '_mp_prec+1' limbs are held in a variable, the low limb is
|
1541
|
+
not needed for the intended precision, only the '_mp_prec' high
|
1610
1542
|
limbs. But zeroing it out or moving the rest down is unnecessary.
|
1611
1543
|
Subsequent routines reading the value will simply take the high
|
1612
|
-
limbs they need, and this will be
|
1544
|
+
limbs they need, and this will be '_mp_prec' if their target has
|
1613
1545
|
that same precision. This is no more than a pointer adjustment,
|
1614
1546
|
and must be checked anyway since the destination precision can be
|
1615
1547
|
different from the sources.
|
1616
1548
|
|
1617
|
-
Copy functions like
|
1618
|
-
if available. This ensures that a variable which has
|
1619
|
-
equal to
|
1620
|
-
Strictly speaking this is unnecessary since only
|
1549
|
+
Copy functions like 'mpf_set' will retain a full '_mp_prec+1' limbs
|
1550
|
+
if available. This ensures that a variable which has '_mp_size'
|
1551
|
+
equal to '_mp_prec+1' will get its full exact value copied.
|
1552
|
+
Strictly speaking this is unnecessary since only '_mp_prec' limbs
|
1621
1553
|
are needed for the application's requested precision, but it's
|
1622
|
-
considered that an
|
1554
|
+
considered that an 'mpf_set' from one variable into another of the
|
1623
1555
|
same precision ought to produce an exact copy.
|
1624
1556
|
|
1625
1557
|
Application Precisions
|
1626
|
-
|
1627
|
-
to an
|
1558
|
+
'__GMPF_BITS_TO_PREC' converts an application requested precision
|
1559
|
+
to an '_mp_prec'. The value in bits is rounded up to a whole limb
|
1628
1560
|
then an extra limb is added since the most significant limb of
|
1629
|
-
|
1561
|
+
'_mp_d' is only non-zero and therefore might contain only one bit.
|
1630
1562
|
|
1631
|
-
|
1632
|
-
extra limb from
|
1633
|
-
effect of reading back with
|
1634
|
-
rounded up to a multiple of
|
1563
|
+
'__GMPF_PREC_TO_BITS' does the reverse conversion, and removes the
|
1564
|
+
extra limb from '_mp_prec' before converting to bits. The net
|
1565
|
+
effect of reading back with 'mpf_get_prec' is simply the precision
|
1566
|
+
rounded up to a multiple of 'mp_bits_per_limb'.
|
1635
1567
|
|
1636
1568
|
Note that the extra limb added here for the high only being
|
1637
|
-
non-zero is in addition to the extra limb allocated to
|
1638
|
-
For example with a 32-bit limb, an application request for 250
|
1639
|
-
|
1640
|
-
|
1641
|
-
|
1642
|
-
|
1643
|
-
bits.
|
1569
|
+
non-zero is in addition to the extra limb allocated to '_mp_d'.
|
1570
|
+
For example with a 32-bit limb, an application request for 250 bits
|
1571
|
+
will be rounded up to 8 limbs, then an extra added for the high
|
1572
|
+
being only non-zero, giving an '_mp_prec' of 9. '_mp_d' then gets
|
1573
|
+
10 limbs allocated. Reading back with 'mpf_get_prec' will take
|
1574
|
+
'_mp_prec' subtract 1 limb and multiply by 32, giving 256 bits.
|
1644
1575
|
|
1645
1576
|
Strictly speaking, the fact the high limb has at least one bit
|
1646
1577
|
means that a float with, say, 3 limbs of 32-bits each will be
|
1647
|
-
holding at least 65 bits, but for the purposes of
|
1578
|
+
holding at least 65 bits, but for the purposes of 'mpf_t' it's
|
1648
1579
|
considered simply to be 64 bits, a nice multiple of the limb size.
|
1649
1580
|
|
1650
1581
|
|
@@ -1653,29 +1584,29 @@ File: gmp.info, Node: Raw Output Internals, Next: C++ Interface Internals, Pr
|
|
1653
1584
|
16.4 Raw Output Internals
|
1654
1585
|
=========================
|
1655
1586
|
|
1656
|
-
|
1587
|
+
'mpz_out_raw' uses the following format.
|
1657
1588
|
|
1658
1589
|
+------+------------------------+
|
1659
1590
|
| size | data bytes |
|
1660
1591
|
+------+------------------------+
|
1661
1592
|
|
1662
1593
|
The size is 4 bytes written most significant byte first, being the
|
1663
|
-
number of subsequent data bytes, or the twos complement negative of
|
1664
|
-
|
1665
|
-
|
1594
|
+
number of subsequent data bytes, or the twos complement negative of that
|
1595
|
+
when a negative integer is represented. The data bytes are the absolute
|
1596
|
+
value of the integer, written most significant byte first.
|
1666
1597
|
|
1667
1598
|
The most significant data byte is always non-zero, so the output is
|
1668
1599
|
the same on all systems, irrespective of limb size.
|
1669
1600
|
|
1670
1601
|
In GMP 1, leading zero bytes were written to pad the data bytes to a
|
1671
|
-
multiple of the limb size.
|
1602
|
+
multiple of the limb size. 'mpz_inp_raw' will still accept this, for
|
1672
1603
|
compatibility.
|
1673
1604
|
|
1674
1605
|
The use of "big endian" for both the size and data fields is
|
1675
1606
|
deliberate, it makes the data easy to read in a hex dump of a file.
|
1676
1607
|
Unfortunately it also means that the limb data must be reversed when
|
1677
|
-
reading or writing, so neither a big endian nor little endian system
|
1678
|
-
|
1608
|
+
reading or writing, so neither a big endian nor little endian system can
|
1609
|
+
just read and write '_mp_d'.
|
1679
1610
|
|
1680
1611
|
|
1681
1612
|
File: gmp.info, Node: C++ Interface Internals, Prev: Raw Output Internals, Up: Internals
|
@@ -1684,9 +1615,9 @@ File: gmp.info, Node: C++ Interface Internals, Prev: Raw Output Internals, Up
|
|
1684
1615
|
============================
|
1685
1616
|
|
1686
1617
|
A system of expression templates is used to ensure something like
|
1687
|
-
|
1618
|
+
'a=b+c' turns into a simple call to 'mpz_add' etc. For 'mpf_class' the
|
1688
1619
|
scheme also ensures the precision of the final destination is used for
|
1689
|
-
any temporaries within a statement like
|
1620
|
+
any temporaries within a statement like 'f=w*x+y*z'. These are
|
1690
1621
|
important features which a naive implementation cannot provide.
|
1691
1622
|
|
1692
1623
|
A simplified description of the scheme follows. The true scheme is
|
@@ -1713,12 +1644,12 @@ And an "additive expression" object,
|
|
1713
1644
|
<__gmp_binary_expr<mpf_class, mpf_class, __gmp_binary_plus> >(f, g);
|
1714
1645
|
}
|
1715
1646
|
|
1716
|
-
The seemingly redundant
|
1647
|
+
The seemingly redundant '__gmp_expr<__gmp_binary_expr<...>>' is used
|
1717
1648
|
to encapsulate any possible kind of expression into a single template
|
1718
|
-
type. In fact even
|
1719
|
-
|
1649
|
+
type. In fact even 'mpf_class' etc are 'typedef' specializations of
|
1650
|
+
'__gmp_expr'.
|
1720
1651
|
|
1721
|
-
Next we define assignment of
|
1652
|
+
Next we define assignment of '__gmp_expr' to 'mpf_class'.
|
1722
1653
|
|
1723
1654
|
template <class T>
|
1724
1655
|
mpf_class & mpf_class::operator=(const __gmp_expr<T> &expr)
|
@@ -1734,14 +1665,14 @@ type. In fact even `mpf_class' etc are `typedef' specializations of
|
|
1734
1665
|
Op::eval(f, expr.val1.get_mpf_t(), expr.val2.get_mpf_t());
|
1735
1666
|
}
|
1736
1667
|
|
1737
|
-
where
|
1738
|
-
operands (here
|
1739
|
-
|
1668
|
+
where 'expr.val1' and 'expr.val2' are references to the expression's
|
1669
|
+
operands (here 'expr' is the '__gmp_binary_expr' stored within the
|
1670
|
+
'__gmp_expr').
|
1740
1671
|
|
1741
1672
|
This way, the expression is actually evaluated only at the time of
|
1742
|
-
assignment, when the required precision (that of
|
1743
|
-
Furthermore the target
|
1744
|
-
|
1673
|
+
assignment, when the required precision (that of 'f') is known.
|
1674
|
+
Furthermore the target 'mpf_t' is now available, thus we can call
|
1675
|
+
'mpf_add' directly with 'f' as the output argument.
|
1745
1676
|
|
1746
1677
|
Compound expressions are handled by defining operators taking
|
1747
1678
|
subexpressions as their arguments, like this:
|
@@ -1756,7 +1687,7 @@ subexpressions as their arguments, like this:
|
|
1756
1687
|
(expr1, expr2);
|
1757
1688
|
}
|
1758
1689
|
|
1759
|
-
And the corresponding specializations of
|
1690
|
+
And the corresponding specializations of '__gmp_expr::eval':
|
1760
1691
|
|
1761
1692
|
template <class T, class U, class Op>
|
1762
1693
|
void __gmp_expr
|
@@ -1769,7 +1700,7 @@ subexpressions as their arguments, like this:
|
|
1769
1700
|
}
|
1770
1701
|
|
1771
1702
|
The expression is thus recursively evaluated to any level of
|
1772
|
-
complexity and all subexpressions are evaluated to the precision of
|
1703
|
+
complexity and all subexpressions are evaluated to the precision of 'f'.
|
1773
1704
|
|
1774
1705
|
|
1775
1706
|
File: gmp.info, Node: Contributors, Next: References, Prev: Internals, Up: Top
|
@@ -1777,12 +1708,12 @@ File: gmp.info, Node: Contributors, Next: References, Prev: Internals, Up: T
|
|
1777
1708
|
Appendix A Contributors
|
1778
1709
|
***********************
|
1779
1710
|
|
1780
|
-
|
1711
|
+
Torbj�rn Granlund wrote the original GMP library and is still the main
|
1781
1712
|
developer. Code not explicitly attributed to others, was contributed by
|
1782
|
-
|
1783
|
-
GMP.
|
1713
|
+
Torbj�rn. Several other individuals and organizations have contributed
|
1714
|
+
GMP. Here is a list in chronological order on first contribution:
|
1784
1715
|
|
1785
|
-
Gunnar
|
1716
|
+
Gunnar Sj�din and Hans Riesel helped with mathematical problems in
|
1786
1717
|
early versions of the library.
|
1787
1718
|
|
1788
1719
|
Richard Stallman helped with the interface design and revised the
|
@@ -1792,33 +1723,33 @@ first version of this manual.
|
|
1792
1723
|
the library and made creative suggestions.
|
1793
1724
|
|
1794
1725
|
John Amanatides of York University in Canada contributed the function
|
1795
|
-
|
1726
|
+
'mpz_probab_prime_p'.
|
1796
1727
|
|
1797
1728
|
Paul Zimmermann wrote the REDC-based mpz_powm code, the
|
1798
|
-
|
1729
|
+
Sch�nhage-Strassen FFT multiply code, and the Karatsuba square root
|
1799
1730
|
code. He also improved the Toom3 code for GMP 4.2. Paul sparked the
|
1800
|
-
development of GMP 2, with his comparisons between bignum packages.
|
1801
|
-
|
1802
|
-
|
1803
|
-
|
1731
|
+
development of GMP 2, with his comparisons between bignum packages. The
|
1732
|
+
ECMNET project Paul is organizing was a driving force behind many of the
|
1733
|
+
optimizations in GMP 3. Paul also wrote the new GMP 4.3 nth root code
|
1734
|
+
(with Torbj�rn).
|
1804
1735
|
|
1805
1736
|
Ken Weber (Kent State University, Universidade Federal do Rio Grande
|
1806
|
-
do Sul) contributed now defunct versions of
|
1807
|
-
|
1808
|
-
|
1737
|
+
do Sul) contributed now defunct versions of 'mpz_gcd', 'mpz_divexact',
|
1738
|
+
'mpn_gcd', and 'mpn_bdivmod', partially supported by CNPq (Brazil) grant
|
1739
|
+
301314194-2.
|
1809
1740
|
|
1810
1741
|
Per Bothner of Cygnus Support helped to set up GMP to use Cygnus'
|
1811
1742
|
configure. He has also made valuable suggestions and tested numerous
|
1812
1743
|
intermediary releases.
|
1813
1744
|
|
1814
|
-
Joachim Hollman was involved in the design of the
|
1815
|
-
and in the
|
1745
|
+
Joachim Hollman was involved in the design of the 'mpf' interface,
|
1746
|
+
and in the 'mpz' design revisions for version 2.
|
1816
1747
|
|
1817
|
-
Bennet Yee contributed the initial versions of
|
1818
|
-
|
1748
|
+
Bennet Yee contributed the initial versions of 'mpz_jacobi' and
|
1749
|
+
'mpz_legendre'.
|
1819
1750
|
|
1820
|
-
Andreas Schwab contributed the files
|
1821
|
-
|
1751
|
+
Andreas Schwab contributed the files 'mpn/m68k/lshift.S' and
|
1752
|
+
'mpn/m68k/rshift.S' (now in '.asm' form).
|
1822
1753
|
|
1823
1754
|
Robert Harley of Inria, France and David Seal of ARM, England,
|
1824
1755
|
suggested clever improvements for population count. Robert also wrote
|
@@ -1826,35 +1757,34 @@ highly optimized Karatsuba and 3-way Toom multiplication functions for
|
|
1826
1757
|
GMP 3, and contributed the ARM assembly code.
|
1827
1758
|
|
1828
1759
|
Torsten Ekedahl of the Mathematical department of Stockholm
|
1829
|
-
University provided significant inspiration during several phases of
|
1830
|
-
|
1760
|
+
University provided significant inspiration during several phases of the
|
1761
|
+
GMP development. His mathematical expertise helped improve several
|
1831
1762
|
algorithms.
|
1832
1763
|
|
1833
1764
|
Linus Nordberg wrote the new configure system based on autoconf and
|
1834
1765
|
implemented the new random functions.
|
1835
1766
|
|
1836
|
-
Kevin Ryde worked on a large number of things: optimized x86 code,
|
1837
|
-
|
1767
|
+
Kevin Ryde worked on a large number of things: optimized x86 code, m4
|
1768
|
+
asm macros, parameter tuning, speed measuring, the configure system,
|
1838
1769
|
function inlining, divisibility tests, bit scanning, Jacobi symbols,
|
1839
1770
|
Fibonacci and Lucas number functions, printf and scanf functions, perl
|
1840
|
-
interface, demo expression parser, the algorithms chapter in the
|
1841
|
-
|
1842
|
-
elsewhere.
|
1771
|
+
interface, demo expression parser, the algorithms chapter in the manual,
|
1772
|
+
'gmpasm-mode.el', and various miscellaneous improvements elsewhere.
|
1843
1773
|
|
1844
1774
|
Kent Boortz made the Mac OS 9 port.
|
1845
1775
|
|
1846
1776
|
Steve Root helped write the optimized alpha 21264 assembly code.
|
1847
1777
|
|
1848
|
-
Gerardo Ballabio wrote the
|
1849
|
-
|
1778
|
+
Gerardo Ballabio wrote the 'gmpxx.h' C++ class interface and the C++
|
1779
|
+
'istream' input routines.
|
1850
1780
|
|
1851
|
-
Jason Moxham rewrote
|
1781
|
+
Jason Moxham rewrote 'mpz_fac_ui'.
|
1852
1782
|
|
1853
1783
|
Pedro Gimeno implemented the Mersenne Twister and made other random
|
1854
1784
|
number improvements.
|
1855
1785
|
|
1856
|
-
Niels
|
1857
|
-
code, the quadratic Hensel division code, and (with
|
1786
|
+
Niels M�ller wrote the sub-quadratic GCD, extended GCD and jacobi
|
1787
|
+
code, the quadratic Hensel division code, and (with Torbj�rn) the new
|
1858
1788
|
divide and conquer division code for GMP 4.3. Niels also helped
|
1859
1789
|
implement the new Toom multiply code for GMP 4.3 and implemented helper
|
1860
1790
|
functions to simplify Toom evaluations for GMP 5.0. He wrote the
|
@@ -1865,35 +1795,35 @@ mini-gmp package used for gmp bootstrapping.
|
|
1865
1795
|
strategy, and found the optimal strategies for evaluation and
|
1866
1796
|
interpolation in Toom multiplication.
|
1867
1797
|
|
1868
|
-
Marco Bodrato helped implement the new Toom multiply code for GMP
|
1869
|
-
|
1870
|
-
|
1871
|
-
|
1872
|
-
|
1873
|
-
|
1798
|
+
Marco Bodrato helped implement the new Toom multiply code for GMP 4.3
|
1799
|
+
and implemented most of the new Toom multiply and squaring code for 5.0.
|
1800
|
+
He is the main author of the current mpn_mulmod_bnm1, mpn_mullo_n, and
|
1801
|
+
mpn_sqrlo. Marco also wrote the functions mpn_invert and
|
1802
|
+
mpn_invertappr, and improved the speed of integer root extraction. He
|
1803
|
+
is the author of the current combinatorial functions: binomial,
|
1874
1804
|
factorial, multifactorial, primorial.
|
1875
1805
|
|
1876
|
-
David Harvey suggested the internal function
|
1806
|
+
David Harvey suggested the internal function 'mpn_bdiv_dbm1',
|
1877
1807
|
implementing division relevant to Toom multiplication. He also worked
|
1878
1808
|
on fast assembly sequences, in particular on a fast AMD64
|
1879
|
-
|
1880
|
-
|
1809
|
+
'mpn_mul_basecase'. He wrote the internal middle product functions
|
1810
|
+
'mpn_mulmid_basecase', 'mpn_toom42_mulmid', 'mpn_mulmid_n' and related
|
1881
1811
|
helper routines.
|
1882
1812
|
|
1883
|
-
Martin Boij wrote
|
1813
|
+
Martin Boij wrote 'mpn_perfect_power_p'.
|
1884
1814
|
|
1885
|
-
Marc Glisse improved
|
1886
|
-
specializations of
|
1815
|
+
Marc Glisse improved 'gmpxx.h': use fewer temporaries (faster),
|
1816
|
+
specializations of 'numeric_limits' and 'common_type', C++11 features
|
1887
1817
|
(move constructors, explicit bool conversion, UDL), make the conversion
|
1888
|
-
from
|
1889
|
-
argument is a small compile-time constant, replace some heap
|
1890
|
-
|
1891
|
-
|
1818
|
+
from 'mpq_class' to 'mpz_class' explicit, optimize operations where one
|
1819
|
+
argument is a small compile-time constant, replace some heap allocations
|
1820
|
+
by stack allocations. He also fixed the eofbit handling of C++ streams,
|
1821
|
+
and removed one division from 'mpq/aors.c'.
|
1892
1822
|
|
1893
1823
|
David S Miller wrote assembly code for SPARC T3 and T4.
|
1894
1824
|
|
1895
|
-
Mark Sofroniou cleaned up the types of mul_fft.c, letting it work
|
1896
|
-
|
1825
|
+
Mark Sofroniou cleaned up the types of mul_fft.c, letting it work for
|
1826
|
+
huge operands.
|
1897
1827
|
|
1898
1828
|
Ulrich Weigand ported GMP to the powerpc64le ABI.
|
1899
1829
|
|
@@ -1905,14 +1835,14 @@ have contributed to GMP but are not listed above, please tell
|
|
1905
1835
|
supported in part by the ESPRIT-BRA (Basic Research Activities) 6846
|
1906
1836
|
project POSSO (POlynomial System SOlving).
|
1907
1837
|
|
1908
|
-
The development of GMP 2, 3, and 4.0 was supported in part by the
|
1909
|
-
|
1838
|
+
The development of GMP 2, 3, and 4.0 was supported in part by the IDA
|
1839
|
+
Center for Computing Sciences.
|
1910
1840
|
|
1911
|
-
The development of GMP 4.3, 5.0, and 5.1 was supported in part by
|
1912
|
-
|
1841
|
+
The development of GMP 4.3, 5.0, and 5.1 was supported in part by the
|
1842
|
+
Swedish Foundation for Strategic Research.
|
1913
1843
|
|
1914
|
-
Thanks go to Hans Thorsen for donating an SGI system for the GMP
|
1915
|
-
|
1844
|
+
Thanks go to Hans Thorsen for donating an SGI system for the GMP test
|
1845
|
+
system environment.
|
1916
1846
|
|
1917
1847
|
|
1918
1848
|
File: gmp.info, Node: References, Next: GNU Free Documentation License, Prev: Contributors, Up: Top
|
@@ -1929,85 +1859,84 @@ B.1 Books
|
|
1929
1859
|
|
1930
1860
|
* Richard Crandall and Carl Pomerance, "Prime Numbers: A
|
1931
1861
|
Computational Perspective", 2nd edition, Springer-Verlag, 2005.
|
1932
|
-
|
1862
|
+
<http://www.math.dartmouth.edu/~carlp/>
|
1933
1863
|
|
1934
1864
|
* Henri Cohen, "A Course in Computational Algebraic Number Theory",
|
1935
1865
|
Graduate Texts in Mathematics number 138, Springer-Verlag, 1993.
|
1936
|
-
|
1866
|
+
<http://www.math.u-bordeaux.fr/~cohen/>
|
1937
1867
|
|
1938
1868
|
* Donald E. Knuth, "The Art of Computer Programming", volume 2,
|
1939
1869
|
"Seminumerical Algorithms", 3rd edition, Addison-Wesley, 1998.
|
1940
|
-
|
1870
|
+
<http://www-cs-faculty.stanford.edu/~knuth/taocp.html>
|
1941
1871
|
|
1942
1872
|
* John D. Lipson, "Elements of Algebra and Algebraic Computing", The
|
1943
1873
|
Benjamin Cummings Publishing Company Inc, 1981.
|
1944
1874
|
|
1945
1875
|
* Alfred J. Menezes, Paul C. van Oorschot and Scott A. Vanstone,
|
1946
1876
|
"Handbook of Applied Cryptography",
|
1947
|
-
|
1877
|
+
<http://www.cacr.math.uwaterloo.ca/hac/>
|
1948
1878
|
|
1949
|
-
* Richard M. Stallman and the GCC Developer Community, "Using the
|
1950
|
-
|
1951
|
-
|
1952
|
-
|
1879
|
+
* Richard M. Stallman and the GCC Developer Community, "Using the GNU
|
1880
|
+
Compiler Collection", Free Software Foundation, 2008, available
|
1881
|
+
online <https://gcc.gnu.org/onlinedocs/>, and in the GCC package
|
1882
|
+
<https://ftp.gnu.org/gnu/gcc/>
|
1953
1883
|
|
1954
1884
|
B.2 Papers
|
1955
1885
|
==========
|
1956
1886
|
|
1957
1887
|
* Yves Bertot, Nicolas Magaud and Paul Zimmermann, "A Proof of GMP
|
1958
1888
|
Square Root", Journal of Automated Reasoning, volume 29, 2002, pp.
|
1959
|
-
225-252. Also available online as INRIA Research Report 4475,
|
1960
|
-
|
1889
|
+
225-252. Also available online as INRIA Research Report 4475, June
|
1890
|
+
2002, <http://hal.inria.fr/docs/00/07/21/13/PDF/RR-4475.pdf>
|
1961
1891
|
|
1962
1892
|
* Christoph Burnikel and Joachim Ziegler, "Fast Recursive Division",
|
1963
1893
|
Max-Planck-Institut fuer Informatik Research Report MPI-I-98-1-022,
|
1964
|
-
|
1894
|
+
<http://data.mpi-sb.mpg.de/internet/reports.nsf/NumberView/1998-1-022>
|
1965
1895
|
|
1966
|
-
*
|
1896
|
+
* Torbj�rn Granlund and Peter L. Montgomery, "Division by Invariant
|
1967
1897
|
Integers using Multiplication", in Proceedings of the SIGPLAN
|
1968
1898
|
PLDI'94 Conference, June 1994. Also available
|
1969
|
-
|
1899
|
+
<https://gmplib.org/~tege/divcnst-pldi94.pdf>.
|
1970
1900
|
|
1971
|
-
* Niels
|
1972
|
-
|
1973
|
-
|
1901
|
+
* Niels M�ller and Torbj�rn Granlund, "Improved division by invariant
|
1902
|
+
integers", IEEE Transactions on Computers, 11 June 2010.
|
1903
|
+
<https://gmplib.org/~tege/division-paper.pdf>
|
1974
1904
|
|
1975
|
-
*
|
1976
|
-
|
1905
|
+
* Torbj�rn Granlund and Niels M�ller, "Division of integers large and
|
1906
|
+
small", to appear.
|
1977
1907
|
|
1978
1908
|
* Tudor Jebelean, "An algorithm for exact division", Journal of
|
1979
1909
|
Symbolic Computation, volume 15, 1993, pp. 169-180. Research
|
1980
1910
|
report version available
|
1981
|
-
|
1911
|
+
<ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1992/92-35.ps.gz>
|
1982
1912
|
|
1983
1913
|
* Tudor Jebelean, "Exact Division with Karatsuba Complexity -
|
1984
1914
|
Extended Abstract", RISC-Linz technical report 96-31,
|
1985
|
-
|
1915
|
+
<ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1996/96-31.ps.gz>
|
1986
1916
|
|
1987
1917
|
* Tudor Jebelean, "Practical Integer Division with Karatsuba
|
1988
1918
|
Complexity", ISSAC 97, pp. 339-341. Technical report available
|
1989
|
-
|
1919
|
+
<ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1996/96-29.ps.gz>
|
1990
1920
|
|
1991
1921
|
* Tudor Jebelean, "A Generalization of the Binary GCD Algorithm",
|
1992
1922
|
ISSAC 93, pp. 111-116. Technical report version available
|
1993
|
-
|
1923
|
+
<ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1993/93-01.ps.gz>
|
1994
1924
|
|
1995
|
-
* Tudor Jebelean, "A Double-Digit Lehmer-Euclid Algorithm for
|
1996
|
-
|
1997
|
-
|
1998
|
-
|
1999
|
-
`ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1992/92-69.ps.gz'
|
1925
|
+
* Tudor Jebelean, "A Double-Digit Lehmer-Euclid Algorithm for Finding
|
1926
|
+
the GCD of Long Integers", Journal of Symbolic Computation, volume
|
1927
|
+
19, 1995, pp. 145-157. Technical report version also available
|
1928
|
+
<ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1992/92-69.ps.gz>
|
2000
1929
|
|
2001
1930
|
* Werner Krandick and Tudor Jebelean, "Bidirectional Exact Integer
|
2002
1931
|
Division", Journal of Symbolic Computation, volume 21, 1996, pp.
|
2003
1932
|
441-455. Early technical report version also available
|
2004
|
-
|
1933
|
+
<ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1994/94-50.ps.gz>
|
2005
1934
|
|
2006
1935
|
* Makoto Matsumoto and Takuji Nishimura, "Mersenne Twister: A
|
2007
1936
|
623-dimensionally equidistributed uniform pseudorandom number
|
2008
1937
|
generator", ACM Transactions on Modelling and Computer Simulation,
|
2009
1938
|
volume 8, January 1998, pp. 3-30. Available online
|
2010
|
-
|
1939
|
+
<http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/ARTICLES/mt.ps.gz>
|
2011
1940
|
(or .pdf)
|
2012
1941
|
|
2013
1942
|
* R. Moenck and A. Borodin, "Fast Modular Transforms via Division",
|
@@ -2016,15 +1945,15 @@ B.2 Papers
|
|
2016
1945
|
Modular Transforms", Journal of Computer and System Sciences,
|
2017
1946
|
volume 8, number 3, June 1974, pp. 366-386.
|
2018
1947
|
|
2019
|
-
* Niels
|
2020
|
-
GCD
|
2021
|
-
|
1948
|
+
* Niels M�ller, "On Sch�nhage's algorithm and subquadratic integer
|
1949
|
+
GCD computation", in Mathematics of Computation, volume 77, January
|
1950
|
+
2008, pp. 589-607.
|
2022
1951
|
|
2023
1952
|
* Peter L. Montgomery, "Modular Multiplication Without Trial
|
2024
1953
|
Division", in Mathematics of Computation, volume 44, number 170,
|
2025
1954
|
April 1985.
|
2026
1955
|
|
2027
|
-
* Arnold
|
1956
|
+
* Arnold Sch�nhage and Volker Strassen, "Schnelle Multiplikation
|
2028
1957
|
grosser Zahlen", Computing 7, 1971, pp. 281-292.
|
2029
1958
|
|
2030
1959
|
* Kenneth Weber, "The accelerated integer GCD algorithm", ACM
|
@@ -2033,11 +1962,11 @@ B.2 Papers
|
|
2033
1962
|
|
2034
1963
|
* Paul Zimmermann, "Karatsuba Square Root", INRIA Research Report
|
2035
1964
|
3805, November 1999,
|
2036
|
-
|
1965
|
+
<http://hal.inria.fr/inria-00072854/PDF/RR-3805.pdf>
|
2037
1966
|
|
2038
1967
|
* Paul Zimmermann, "A Proof of GMP Fast Division and Square Root
|
2039
1968
|
Implementations",
|
2040
|
-
|
1969
|
+
<http://www.loria.fr/~zimmerma/papers/proof-div-sqrt.ps.gz>
|
2041
1970
|
|
2042
1971
|
* Dan Zuras, "On Squaring and Multiplying Large Integers", ARITH-11:
|
2043
1972
|
IEEE Symposium on Computer Arithmetic, 1993, pp. 260 to 271.
|
@@ -2053,8 +1982,8 @@ Appendix C GNU Free Documentation License
|
|
2053
1982
|
|
2054
1983
|
Version 1.3, 3 November 2008
|
2055
1984
|
|
2056
|
-
Copyright
|
2057
|
-
|
1985
|
+
Copyright � 2000-2002, 2007, 2008 Free Software Foundation, Inc.
|
1986
|
+
<http://fsf.org/>
|
2058
1987
|
|
2059
1988
|
Everyone is permitted to copy and distribute verbatim copies
|
2060
1989
|
of this license document, but changing it is not allowed.
|
@@ -2079,21 +2008,21 @@ Appendix C GNU Free Documentation License
|
|
2079
2008
|
free program should come with manuals providing the same freedoms
|
2080
2009
|
that the software does. But this License is not limited to
|
2081
2010
|
software manuals; it can be used for any textual work, regardless
|
2082
|
-
of subject matter or whether it is published as a printed book.
|
2083
|
-
|
2011
|
+
of subject matter or whether it is published as a printed book. We
|
2012
|
+
recommend this License principally for works whose purpose is
|
2084
2013
|
instruction or reference.
|
2085
2014
|
|
2086
2015
|
1. APPLICABILITY AND DEFINITIONS
|
2087
2016
|
|
2088
2017
|
This License applies to any manual or other work, in any medium,
|
2089
|
-
that contains a notice placed by the copyright holder saying it
|
2090
|
-
|
2018
|
+
that contains a notice placed by the copyright holder saying it can
|
2019
|
+
be distributed under the terms of this License. Such a notice
|
2091
2020
|
grants a world-wide, royalty-free license, unlimited in duration,
|
2092
2021
|
to use that work under the conditions stated herein. The
|
2093
2022
|
"Document", below, refers to any such manual or work. Any member
|
2094
|
-
of the public is a licensee, and is addressed as "you". You
|
2095
|
-
|
2096
|
-
|
2023
|
+
of the public is a licensee, and is addressed as "you". You accept
|
2024
|
+
the license if you copy, modify or distribute the work in a way
|
2025
|
+
requiring permission under copyright law.
|
2097
2026
|
|
2098
2027
|
A "Modified Version" of the Document means any work containing the
|
2099
2028
|
Document or a portion of it, either copied verbatim, or with
|
@@ -2111,12 +2040,12 @@ Appendix C GNU Free Documentation License
|
|
2111
2040
|
regarding them.
|
2112
2041
|
|
2113
2042
|
The "Invariant Sections" are certain Secondary Sections whose
|
2114
|
-
titles are designated, as being those of Invariant Sections, in
|
2115
|
-
|
2116
|
-
|
2117
|
-
|
2118
|
-
|
2119
|
-
|
2043
|
+
titles are designated, as being those of Invariant Sections, in the
|
2044
|
+
notice that says that the Document is released under this License.
|
2045
|
+
If a section does not fit the above definition of Secondary then it
|
2046
|
+
is not allowed to be designated as Invariant. The Document may
|
2047
|
+
contain zero Invariant Sections. If the Document does not identify
|
2048
|
+
any Invariant Sections then there are none.
|
2120
2049
|
|
2121
2050
|
The "Cover Texts" are certain short passages of text that are
|
2122
2051
|
listed, as Front-Cover Texts or Back-Cover Texts, in the notice
|
@@ -2127,27 +2056,27 @@ Appendix C GNU Free Documentation License
|
|
2127
2056
|
A "Transparent" copy of the Document means a machine-readable copy,
|
2128
2057
|
represented in a format whose specification is available to the
|
2129
2058
|
general public, that is suitable for revising the document
|
2130
|
-
straightforwardly with generic text editors or (for images
|
2131
|
-
|
2132
|
-
|
2133
|
-
|
2134
|
-
|
2135
|
-
|
2136
|
-
|
2137
|
-
|
2138
|
-
|
2139
|
-
|
2059
|
+
straightforwardly with generic text editors or (for images composed
|
2060
|
+
of pixels) generic paint programs or (for drawings) some widely
|
2061
|
+
available drawing editor, and that is suitable for input to text
|
2062
|
+
formatters or for automatic translation to a variety of formats
|
2063
|
+
suitable for input to text formatters. A copy made in an otherwise
|
2064
|
+
Transparent file format whose markup, or absence of markup, has
|
2065
|
+
been arranged to thwart or discourage subsequent modification by
|
2066
|
+
readers is not Transparent. An image format is not Transparent if
|
2067
|
+
used for any substantial amount of text. A copy that is not
|
2068
|
+
"Transparent" is called "Opaque".
|
2140
2069
|
|
2141
2070
|
Examples of suitable formats for Transparent copies include plain
|
2142
2071
|
ASCII without markup, Texinfo input format, LaTeX input format,
|
2143
|
-
SGML or XML using a publicly available DTD, and
|
2144
|
-
|
2145
|
-
|
2146
|
-
|
2147
|
-
|
2148
|
-
|
2149
|
-
|
2150
|
-
|
2072
|
+
SGML or XML using a publicly available DTD, and standard-conforming
|
2073
|
+
simple HTML, PostScript or PDF designed for human modification.
|
2074
|
+
Examples of transparent image formats include PNG, XCF and JPG.
|
2075
|
+
Opaque formats include proprietary formats that can be read and
|
2076
|
+
edited only by proprietary word processors, SGML or XML for which
|
2077
|
+
the DTD and/or processing tools are not generally available, and
|
2078
|
+
the machine-generated HTML, PostScript or PDF produced by some word
|
2079
|
+
processors for output purposes only.
|
2151
2080
|
|
2152
2081
|
The "Title Page" means, for a printed book, the title page itself,
|
2153
2082
|
plus such following pages as are needed to hold, legibly, the
|
@@ -2185,8 +2114,8 @@ Appendix C GNU Free Documentation License
|
|
2185
2114
|
may not use technical measures to obstruct or control the reading
|
2186
2115
|
or further copying of the copies you make or distribute. However,
|
2187
2116
|
you may accept compensation in exchange for copies. If you
|
2188
|
-
distribute a large enough number of copies you must also follow
|
2189
|
-
|
2117
|
+
distribute a large enough number of copies you must also follow the
|
2118
|
+
conditions in section 3.
|
2190
2119
|
|
2191
2120
|
You may also lend copies, under the same conditions stated above,
|
2192
2121
|
and you may publicly display copies.
|
@@ -2200,12 +2129,11 @@ Appendix C GNU Free Documentation License
|
|
2200
2129
|
these Cover Texts: Front-Cover Texts on the front cover, and
|
2201
2130
|
Back-Cover Texts on the back cover. Both covers must also clearly
|
2202
2131
|
and legibly identify you as the publisher of these copies. The
|
2203
|
-
front cover must present the full title with all words of the
|
2204
|
-
|
2205
|
-
|
2206
|
-
|
2207
|
-
|
2208
|
-
other respects.
|
2132
|
+
front cover must present the full title with all words of the title
|
2133
|
+
equally prominent and visible. You may add other material on the
|
2134
|
+
covers in addition. Copying with changes limited to the covers, as
|
2135
|
+
long as they preserve the title of the Document and satisfy these
|
2136
|
+
conditions, can be treated as verbatim copying in other respects.
|
2209
2137
|
|
2210
2138
|
If the required texts for either cover are too voluminous to fit
|
2211
2139
|
legibly, you should put the first ones listed (as many as fit
|
@@ -2213,40 +2141,39 @@ Appendix C GNU Free Documentation License
|
|
2213
2141
|
adjacent pages.
|
2214
2142
|
|
2215
2143
|
If you publish or distribute Opaque copies of the Document
|
2216
|
-
numbering more than 100, you must either include a
|
2217
|
-
|
2218
|
-
|
2219
|
-
|
2220
|
-
|
2221
|
-
|
2222
|
-
|
2223
|
-
|
2224
|
-
|
2225
|
-
|
2226
|
-
|
2227
|
-
retailers) of that edition to the public.
|
2144
|
+
numbering more than 100, you must either include a machine-readable
|
2145
|
+
Transparent copy along with each Opaque copy, or state in or with
|
2146
|
+
each Opaque copy a computer-network location from which the general
|
2147
|
+
network-using public has access to download using public-standard
|
2148
|
+
network protocols a complete Transparent copy of the Document, free
|
2149
|
+
of added material. If you use the latter option, you must take
|
2150
|
+
reasonably prudent steps, when you begin distribution of Opaque
|
2151
|
+
copies in quantity, to ensure that this Transparent copy will
|
2152
|
+
remain thus accessible at the stated location until at least one
|
2153
|
+
year after the last time you distribute an Opaque copy (directly or
|
2154
|
+
through your agents or retailers) of that edition to the public.
|
2228
2155
|
|
2229
2156
|
It is requested, but not required, that you contact the authors of
|
2230
|
-
the Document well before redistributing any large number of
|
2231
|
-
|
2232
|
-
|
2157
|
+
the Document well before redistributing any large number of copies,
|
2158
|
+
to give them a chance to provide you with an updated version of the
|
2159
|
+
Document.
|
2233
2160
|
|
2234
2161
|
4. MODIFICATIONS
|
2235
2162
|
|
2236
2163
|
You may copy and distribute a Modified Version of the Document
|
2237
2164
|
under the conditions of sections 2 and 3 above, provided that you
|
2238
|
-
release the Modified Version under precisely this License, with
|
2239
|
-
|
2240
|
-
|
2241
|
-
|
2242
|
-
|
2165
|
+
release the Modified Version under precisely this License, with the
|
2166
|
+
Modified Version filling the role of the Document, thus licensing
|
2167
|
+
distribution and modification of the Modified Version to whoever
|
2168
|
+
possesses a copy of it. In addition, you must do these things in
|
2169
|
+
the Modified Version:
|
2243
2170
|
|
2244
2171
|
A. Use in the Title Page (and on the covers, if any) a title
|
2245
|
-
distinct from that of the Document, and from those of
|
2246
|
-
|
2247
|
-
|
2248
|
-
|
2249
|
-
|
2172
|
+
distinct from that of the Document, and from those of previous
|
2173
|
+
versions (which should, if there were any, be listed in the
|
2174
|
+
History section of the Document). You may use the same title
|
2175
|
+
as a previous version if the original publisher of that
|
2176
|
+
version gives permission.
|
2250
2177
|
|
2251
2178
|
B. List on the Title Page, as authors, one or more persons or
|
2252
2179
|
entities responsible for authorship of the modifications in
|
@@ -2276,31 +2203,30 @@ Appendix C GNU Free Documentation License
|
|
2276
2203
|
|
2277
2204
|
I. Preserve the section Entitled "History", Preserve its Title,
|
2278
2205
|
and add to it an item stating at least the title, year, new
|
2279
|
-
authors, and publisher of the Modified Version as given on
|
2280
|
-
|
2281
|
-
|
2282
|
-
|
2283
|
-
|
2284
|
-
|
2206
|
+
authors, and publisher of the Modified Version as given on the
|
2207
|
+
Title Page. If there is no section Entitled "History" in the
|
2208
|
+
Document, create one stating the title, year, authors, and
|
2209
|
+
publisher of the Document as given on its Title Page, then add
|
2210
|
+
an item describing the Modified Version as stated in the
|
2211
|
+
previous sentence.
|
2285
2212
|
|
2286
2213
|
J. Preserve the network location, if any, given in the Document
|
2287
2214
|
for public access to a Transparent copy of the Document, and
|
2288
2215
|
likewise the network locations given in the Document for
|
2289
|
-
previous versions it was based on. These may be placed in
|
2290
|
-
|
2291
|
-
|
2292
|
-
|
2293
|
-
|
2216
|
+
previous versions it was based on. These may be placed in the
|
2217
|
+
"History" section. You may omit a network location for a work
|
2218
|
+
that was published at least four years before the Document
|
2219
|
+
itself, or if the original publisher of the version it refers
|
2220
|
+
to gives permission.
|
2294
2221
|
|
2295
2222
|
K. For any section Entitled "Acknowledgements" or "Dedications",
|
2296
|
-
Preserve the Title of the section, and preserve in the
|
2297
|
-
|
2223
|
+
Preserve the Title of the section, and preserve in the section
|
2224
|
+
all the substance and tone of each of the contributor
|
2298
2225
|
acknowledgements and/or dedications given therein.
|
2299
2226
|
|
2300
|
-
L. Preserve all the Invariant Sections of the Document,
|
2301
|
-
|
2302
|
-
|
2303
|
-
titles.
|
2227
|
+
L. Preserve all the Invariant Sections of the Document, unaltered
|
2228
|
+
in their text and in their titles. Section numbers or the
|
2229
|
+
equivalent are not considered part of the section titles.
|
2304
2230
|
|
2305
2231
|
M. Delete any section Entitled "Endorsements". Such a section
|
2306
2232
|
may not be included in the Modified Version.
|
@@ -2313,11 +2239,11 @@ Appendix C GNU Free Documentation License
|
|
2313
2239
|
|
2314
2240
|
If the Modified Version includes new front-matter sections or
|
2315
2241
|
appendices that qualify as Secondary Sections and contain no
|
2316
|
-
material copied from the Document, you may at your option
|
2317
|
-
|
2318
|
-
|
2319
|
-
|
2320
|
-
|
2242
|
+
material copied from the Document, you may at your option designate
|
2243
|
+
some or all of these sections as invariant. To do this, add their
|
2244
|
+
titles to the list of Invariant Sections in the Modified Version's
|
2245
|
+
license notice. These titles must be distinct from any other
|
2246
|
+
section titles.
|
2321
2247
|
|
2322
2248
|
You may add a section Entitled "Endorsements", provided it contains
|
2323
2249
|
nothing but endorsements of your Modified Version by various
|
@@ -2326,15 +2252,15 @@ Appendix C GNU Free Documentation License
|
|
2326
2252
|
definition of a standard.
|
2327
2253
|
|
2328
2254
|
You may add a passage of up to five words as a Front-Cover Text,
|
2329
|
-
and a passage of up to 25 words as a Back-Cover Text, to the end
|
2330
|
-
|
2331
|
-
|
2332
|
-
|
2333
|
-
|
2334
|
-
|
2335
|
-
|
2336
|
-
|
2337
|
-
|
2255
|
+
and a passage of up to 25 words as a Back-Cover Text, to the end of
|
2256
|
+
the list of Cover Texts in the Modified Version. Only one passage
|
2257
|
+
of Front-Cover Text and one of Back-Cover Text may be added by (or
|
2258
|
+
through arrangements made by) any one entity. If the Document
|
2259
|
+
already includes a cover text for the same cover, previously added
|
2260
|
+
by you or by arrangement made by the same entity you are acting on
|
2261
|
+
behalf of, you may not add another; but you may replace the old
|
2262
|
+
one, on explicit permission from the previous publisher that added
|
2263
|
+
the old one.
|
2338
2264
|
|
2339
2265
|
The author(s) and publisher(s) of the Document do not by this
|
2340
2266
|
License give permission to use their names for publicity for or to
|
@@ -2344,8 +2270,8 @@ Appendix C GNU Free Documentation License
|
|
2344
2270
|
|
2345
2271
|
You may combine the Document with other documents released under
|
2346
2272
|
this License, under the terms defined in section 4 above for
|
2347
|
-
modified versions, provided that you include in the combination
|
2348
|
-
|
2273
|
+
modified versions, provided that you include in the combination all
|
2274
|
+
of the Invariant Sections of all of the original documents,
|
2349
2275
|
unmodified, and list them all as Invariant Sections of your
|
2350
2276
|
combined work in its license notice, and that you preserve all
|
2351
2277
|
their Warranty Disclaimers.
|
@@ -2372,20 +2298,20 @@ Appendix C GNU Free Documentation License
|
|
2372
2298
|
documents released under this License, and replace the individual
|
2373
2299
|
copies of this License in the various documents with a single copy
|
2374
2300
|
that is included in the collection, provided that you follow the
|
2375
|
-
rules of this License for verbatim copying of each of the
|
2376
|
-
|
2301
|
+
rules of this License for verbatim copying of each of the documents
|
2302
|
+
in all other respects.
|
2377
2303
|
|
2378
2304
|
You may extract a single document from such a collection, and
|
2379
2305
|
distribute it individually under this License, provided you insert
|
2380
|
-
a copy of this License into the extracted document, and follow
|
2381
|
-
|
2382
|
-
|
2306
|
+
a copy of this License into the extracted document, and follow this
|
2307
|
+
License in all other respects regarding verbatim copying of that
|
2308
|
+
document.
|
2383
2309
|
|
2384
2310
|
7. AGGREGATION WITH INDEPENDENT WORKS
|
2385
2311
|
|
2386
2312
|
A compilation of the Document or its derivatives with other
|
2387
|
-
separate and independent documents or works, in or on a volume of
|
2388
|
-
|
2313
|
+
separate and independent documents or works, in or on a volume of a
|
2314
|
+
storage or distribution medium, is called an "aggregate" if the
|
2389
2315
|
copyright resulting from the compilation is not used to limit the
|
2390
2316
|
legal rights of the compilation's users beyond what the individual
|
2391
2317
|
works permit. When the Document is included in an aggregate, this
|
@@ -2430,8 +2356,8 @@ Appendix C GNU Free Documentation License
|
|
2430
2356
|
|
2431
2357
|
However, if you cease all violation of this License, then your
|
2432
2358
|
license from a particular copyright holder is reinstated (a)
|
2433
|
-
provisionally, unless and until the copyright holder explicitly
|
2434
|
-
|
2359
|
+
provisionally, unless and until the copyright holder explicitly and
|
2360
|
+
finally terminates your license, and (b) permanently, if the
|
2435
2361
|
copyright holder fails to notify you of the violation by some
|
2436
2362
|
reasonable means prior to 60 days after the cessation.
|
2437
2363
|
|
@@ -2443,33 +2369,33 @@ Appendix C GNU Free Documentation License
|
|
2443
2369
|
after your receipt of the notice.
|
2444
2370
|
|
2445
2371
|
Termination of your rights under this section does not terminate
|
2446
|
-
the licenses of parties who have received copies or rights from
|
2447
|
-
|
2448
|
-
|
2449
|
-
|
2372
|
+
the licenses of parties who have received copies or rights from you
|
2373
|
+
under this License. If your rights have been terminated and not
|
2374
|
+
permanently reinstated, receipt of a copy of some or all of the
|
2375
|
+
same material does not give you any rights to use it.
|
2450
2376
|
|
2451
|
-
|
2377
|
+
10. FUTURE REVISIONS OF THIS LICENSE
|
2452
2378
|
|
2453
2379
|
The Free Software Foundation may publish new, revised versions of
|
2454
2380
|
the GNU Free Documentation License from time to time. Such new
|
2455
2381
|
versions will be similar in spirit to the present version, but may
|
2456
2382
|
differ in detail to address new problems or concerns. See
|
2457
|
-
|
2383
|
+
<https://www.gnu.org/copyleft/>.
|
2458
2384
|
|
2459
2385
|
Each version of the License is given a distinguishing version
|
2460
2386
|
number. If the Document specifies that a particular numbered
|
2461
2387
|
version of this License "or any later version" applies to it, you
|
2462
2388
|
have the option of following the terms and conditions either of
|
2463
2389
|
that specified version or of any later version that has been
|
2464
|
-
published (not as a draft) by the Free Software Foundation. If
|
2465
|
-
|
2466
|
-
|
2467
|
-
|
2468
|
-
|
2390
|
+
published (not as a draft) by the Free Software Foundation. If the
|
2391
|
+
Document does not specify a version number of this License, you may
|
2392
|
+
choose any version ever published (not as a draft) by the Free
|
2393
|
+
Software Foundation. If the Document specifies that a proxy can
|
2394
|
+
decide which future versions of this License can be used, that
|
2469
2395
|
proxy's public statement of acceptance of a version permanently
|
2470
2396
|
authorizes you to choose that version for the Document.
|
2471
2397
|
|
2472
|
-
|
2398
|
+
11. RELICENSING
|
2473
2399
|
|
2474
2400
|
"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
|
2475
2401
|
World Wide Web server that publishes copyrightable works and also
|
@@ -2499,7 +2425,6 @@ Appendix C GNU Free Documentation License
|
|
2499
2425
|
site under CC-BY-SA on the same site at any time before August 1,
|
2500
2426
|
2009, provided the MMC is eligible for relicensing.
|
2501
2427
|
|
2502
|
-
|
2503
2428
|
ADDENDUM: How to use this License for your documents
|
2504
2429
|
====================================================
|
2505
2430
|
|
@@ -2516,7 +2441,7 @@ notices just after the title page:
|
|
2516
2441
|
Free Documentation License''.
|
2517
2442
|
|
2518
2443
|
If you have Invariant Sections, Front-Cover Texts and Back-Cover
|
2519
|
-
Texts, replace the "with...Texts."
|
2444
|
+
Texts, replace the "with...Texts." line with this:
|
2520
2445
|
|
2521
2446
|
with the Invariant Sections being LIST THEIR TITLES, with
|
2522
2447
|
the Front-Cover Texts being LIST, and with the Back-Cover Texts
|
@@ -2527,9 +2452,9 @@ combination of the three, merge those two alternatives to suit the
|
|
2527
2452
|
situation.
|
2528
2453
|
|
2529
2454
|
If your document contains nontrivial examples of program code, we
|
2530
|
-
recommend releasing these examples in parallel under your choice of
|
2531
|
-
|
2532
|
-
|
2455
|
+
recommend releasing these examples in parallel under your choice of free
|
2456
|
+
software license, such as the GNU General Public License, to permit
|
2457
|
+
their use in free software.
|
2533
2458
|
|
2534
2459
|
|
2535
2460
|
File: gmp.info, Node: Concept Index, Next: Function Index, Prev: GNU Free Documentation License, Up: Top
|
@@ -2542,18 +2467,18 @@ Concept Index
|
|
2542
2467
|
|
2543
2468
|
* #include: Headers and Libraries.
|
2544
2469
|
(line 6)
|
2545
|
-
* --build: Build Options. (line
|
2546
|
-
* --disable-fft: Build Options. (line
|
2547
|
-
* --disable-shared: Build Options. (line
|
2548
|
-
* --disable-static: Build Options. (line
|
2549
|
-
* --enable-alloca: Build Options. (line
|
2550
|
-
* --enable-assert: Build Options. (line
|
2551
|
-
* --enable-cxx: Build Options. (line
|
2552
|
-
* --enable-fat: Build Options. (line
|
2553
|
-
* --enable-profiling
|
2554
|
-
* --enable-profiling
|
2470
|
+
* --build: Build Options. (line 51)
|
2471
|
+
* --disable-fft: Build Options. (line 307)
|
2472
|
+
* --disable-shared: Build Options. (line 44)
|
2473
|
+
* --disable-static: Build Options. (line 44)
|
2474
|
+
* --enable-alloca: Build Options. (line 273)
|
2475
|
+
* --enable-assert: Build Options. (line 313)
|
2476
|
+
* --enable-cxx: Build Options. (line 225)
|
2477
|
+
* --enable-fat: Build Options. (line 160)
|
2478
|
+
* --enable-profiling: Build Options. (line 317)
|
2479
|
+
* --enable-profiling <1>: Profiling. (line 6)
|
2555
2480
|
* --exec-prefix: Build Options. (line 32)
|
2556
|
-
* --host: Build Options. (line
|
2481
|
+
* --host: Build Options. (line 65)
|
2557
2482
|
* --prefix: Build Options. (line 32)
|
2558
2483
|
* -finstrument-functions: Profiling. (line 66)
|
2559
2484
|
* 2exp functions: Efficiency. (line 43)
|
@@ -2561,22 +2486,22 @@ Concept Index
|
|
2561
2486
|
(line 94)
|
2562
2487
|
* 80x86: Notes for Particular Systems.
|
2563
2488
|
(line 150)
|
2564
|
-
* ABI
|
2565
|
-
* ABI
|
2489
|
+
* ABI: Build Options. (line 167)
|
2490
|
+
* ABI <1>: ABI and ISA. (line 6)
|
2566
2491
|
* About this manual: Introduction to GMP. (line 57)
|
2567
2492
|
* AC_CHECK_LIB: Autoconf. (line 11)
|
2493
|
+
* AIX: ABI and ISA. (line 174)
|
2568
2494
|
* AIX <1>: Notes for Particular Systems.
|
2569
2495
|
(line 7)
|
2570
|
-
* AIX: ABI and ISA. (line 178)
|
2571
2496
|
* Algorithms: Algorithms. (line 6)
|
2572
|
-
* alloca: Build Options. (line
|
2497
|
+
* alloca: Build Options. (line 273)
|
2573
2498
|
* Allocation of memory: Custom Allocation. (line 6)
|
2574
2499
|
* AMD64: ABI and ISA. (line 44)
|
2575
2500
|
* Anonymous FTP of latest version: Introduction to GMP. (line 37)
|
2576
2501
|
* Application Binary Interface: ABI and ISA. (line 6)
|
2502
|
+
* Arithmetic functions: Integer Arithmetic. (line 6)
|
2577
2503
|
* Arithmetic functions <1>: Rational Arithmetic. (line 6)
|
2578
2504
|
* Arithmetic functions <2>: Float Arithmetic. (line 6)
|
2579
|
-
* Arithmetic functions: Integer Arithmetic. (line 6)
|
2580
2505
|
* ARM: Notes for Particular Systems.
|
2581
2506
|
(line 20)
|
2582
2507
|
* Assembly cache handling: Assembly Cache Handling.
|
@@ -2596,16 +2521,16 @@ Concept Index
|
|
2596
2521
|
(line 6)
|
2597
2522
|
* Assembly writing guide: Assembly Writing Guide.
|
2598
2523
|
(line 6)
|
2599
|
-
* Assertion checking
|
2600
|
-
* Assertion checking
|
2601
|
-
* Assignment functions
|
2602
|
-
* Assignment functions <
|
2524
|
+
* Assertion checking: Build Options. (line 313)
|
2525
|
+
* Assertion checking <1>: Debugging. (line 78)
|
2526
|
+
* Assignment functions: Assigning Integers. (line 6)
|
2527
|
+
* Assignment functions <1>: Simultaneous Integer Init & Assign.
|
2603
2528
|
(line 6)
|
2604
|
-
* Assignment functions <
|
2529
|
+
* Assignment functions <2>: Initializing Rationals.
|
2605
2530
|
(line 6)
|
2606
|
-
* Assignment functions <
|
2531
|
+
* Assignment functions <3>: Assigning Floats. (line 6)
|
2532
|
+
* Assignment functions <4>: Simultaneous Float Init & Assign.
|
2607
2533
|
(line 6)
|
2608
|
-
* Assignment functions: Assigning Floats. (line 6)
|
2609
2534
|
* Autoconf: Autoconf. (line 6)
|
2610
2535
|
* Basics: GMP Basics. (line 6)
|
2611
2536
|
* Binomial coefficient algorithm: Binomial Coefficients Algorithm.
|
@@ -2617,9 +2542,9 @@ Concept Index
|
|
2617
2542
|
* Bit manipulation functions: Integer Logic and Bit Fiddling.
|
2618
2543
|
(line 6)
|
2619
2544
|
* Bit scanning functions: Integer Logic and Bit Fiddling.
|
2620
|
-
(line
|
2545
|
+
(line 39)
|
2621
2546
|
* Bit shift left: Integer Arithmetic. (line 38)
|
2622
|
-
* Bit shift right: Integer Division. (line
|
2547
|
+
* Bit shift right: Integer Division. (line 74)
|
2623
2548
|
* Bits per limb: Useful Macros and Constants.
|
2624
2549
|
(line 7)
|
2625
2550
|
* Bug reporting: Reporting Bugs. (line 6)
|
@@ -2631,36 +2556,36 @@ Concept Index
|
|
2631
2556
|
* Build options: Build Options. (line 6)
|
2632
2557
|
* Build problems known: Known Build Problems.
|
2633
2558
|
(line 6)
|
2634
|
-
* Build system: Build Options. (line
|
2559
|
+
* Build system: Build Options. (line 51)
|
2635
2560
|
* Building GMP: Installing GMP. (line 6)
|
2636
2561
|
* Bus error: Debugging. (line 7)
|
2637
|
-
* C compiler: Build Options. (line
|
2638
|
-
* C++ compiler: Build Options. (line
|
2562
|
+
* C compiler: Build Options. (line 178)
|
2563
|
+
* C++ compiler: Build Options. (line 249)
|
2639
2564
|
* C++ interface: C++ Class Interface. (line 6)
|
2640
2565
|
* C++ interface internals: C++ Interface Internals.
|
2641
2566
|
(line 6)
|
2642
2567
|
* C++ istream input: C++ Formatted Input. (line 6)
|
2643
2568
|
* C++ ostream output: C++ Formatted Output.
|
2644
2569
|
(line 6)
|
2645
|
-
* C++ support: Build Options. (line
|
2646
|
-
* CC: Build Options. (line
|
2647
|
-
* CC_FOR_BUILD: Build Options. (line
|
2648
|
-
* CFLAGS: Build Options. (line
|
2649
|
-
* Checker: Debugging. (line
|
2650
|
-
* checkergcc: Debugging. (line
|
2570
|
+
* C++ support: Build Options. (line 225)
|
2571
|
+
* CC: Build Options. (line 178)
|
2572
|
+
* CC_FOR_BUILD: Build Options. (line 212)
|
2573
|
+
* CFLAGS: Build Options. (line 178)
|
2574
|
+
* Checker: Debugging. (line 114)
|
2575
|
+
* checkergcc: Debugging. (line 121)
|
2651
2576
|
* Code organisation: Assembly Code Organisation.
|
2652
2577
|
(line 6)
|
2653
2578
|
* Compaq C++: Notes for Particular Systems.
|
2654
2579
|
(line 25)
|
2655
|
-
* Comparison functions
|
2580
|
+
* Comparison functions: Integer Comparisons. (line 6)
|
2581
|
+
* Comparison functions <1>: Comparing Rationals. (line 6)
|
2656
2582
|
* Comparison functions <2>: Float Comparison. (line 6)
|
2657
|
-
* Comparison functions: Comparing Rationals. (line 6)
|
2658
2583
|
* Compatibility with older versions: Compatibility with older versions.
|
2659
2584
|
(line 6)
|
2660
2585
|
* Conditions for copying GNU MP: Copying. (line 6)
|
2661
2586
|
* Configuring GMP: Installing GMP. (line 6)
|
2662
2587
|
* Congruence algorithm: Exact Remainder. (line 30)
|
2663
|
-
* Congruence functions: Integer Division. (line
|
2588
|
+
* Congruence functions: Integer Division. (line 150)
|
2664
2589
|
* Constants: Useful Macros and Constants.
|
2665
2590
|
(line 6)
|
2666
2591
|
* Contributors: Contributors. (line 6)
|
@@ -2668,19 +2593,19 @@ Concept Index
|
|
2668
2593
|
(line 6)
|
2669
2594
|
* Conventions for variables: Variable Conventions.
|
2670
2595
|
(line 6)
|
2671
|
-
* Conversion functions
|
2672
|
-
* Conversion functions <
|
2673
|
-
* Conversion functions: Rational Conversions.
|
2596
|
+
* Conversion functions: Converting Integers. (line 6)
|
2597
|
+
* Conversion functions <1>: Rational Conversions.
|
2674
2598
|
(line 6)
|
2599
|
+
* Conversion functions <2>: Converting Floats. (line 6)
|
2675
2600
|
* Copying conditions: Copying. (line 6)
|
2676
|
-
* CPPFLAGS: Build Options. (line
|
2677
|
-
* CPU types
|
2678
|
-
* CPU types
|
2679
|
-
* Cross compiling: Build Options. (line
|
2601
|
+
* CPPFLAGS: Build Options. (line 204)
|
2602
|
+
* CPU types: Introduction to GMP. (line 24)
|
2603
|
+
* CPU types <1>: Build Options. (line 107)
|
2604
|
+
* Cross compiling: Build Options. (line 65)
|
2680
2605
|
* Cryptography functions, low-level: Low-level Functions. (line 507)
|
2681
2606
|
* Custom allocation: Custom Allocation. (line 6)
|
2682
|
-
* CXX: Build Options. (line
|
2683
|
-
* CXXFLAGS: Build Options. (line
|
2607
|
+
* CXX: Build Options. (line 249)
|
2608
|
+
* CXXFLAGS: Build Options. (line 249)
|
2684
2609
|
* Cygwin: Notes for Particular Systems.
|
2685
2610
|
(line 57)
|
2686
2611
|
* Darwin: Known Build Problems.
|
@@ -2691,39 +2616,44 @@ Concept Index
|
|
2691
2616
|
* Digits in an integer: Miscellaneous Integer Functions.
|
2692
2617
|
(line 23)
|
2693
2618
|
* Divisibility algorithm: Exact Remainder. (line 30)
|
2694
|
-
* Divisibility functions: Integer Division. (line
|
2619
|
+
* Divisibility functions: Integer Division. (line 136)
|
2620
|
+
* Divisibility functions <1>: Integer Division. (line 150)
|
2695
2621
|
* Divisibility testing: Efficiency. (line 91)
|
2696
2622
|
* Division algorithms: Division Algorithms. (line 6)
|
2623
|
+
* Division functions: Integer Division. (line 6)
|
2697
2624
|
* Division functions <1>: Rational Arithmetic. (line 24)
|
2698
|
-
* Division functions <2>:
|
2699
|
-
*
|
2700
|
-
* DJGPP <1>: Notes for Particular Systems.
|
2625
|
+
* Division functions <2>: Float Arithmetic. (line 33)
|
2626
|
+
* DJGPP: Notes for Particular Systems.
|
2701
2627
|
(line 57)
|
2702
|
-
* DJGPP
|
2628
|
+
* DJGPP <1>: Known Build Problems.
|
2703
2629
|
(line 18)
|
2704
2630
|
* DLLs: Notes for Particular Systems.
|
2705
2631
|
(line 70)
|
2706
|
-
* DocBook: Build Options. (line
|
2707
|
-
* Documentation formats: Build Options. (line
|
2632
|
+
* DocBook: Build Options. (line 340)
|
2633
|
+
* Documentation formats: Build Options. (line 333)
|
2708
2634
|
* Documentation license: GNU Free Documentation License.
|
2709
2635
|
(line 6)
|
2710
|
-
* DVI: Build Options. (line
|
2636
|
+
* DVI: Build Options. (line 336)
|
2711
2637
|
* Efficiency: Efficiency. (line 6)
|
2712
2638
|
* Emacs: Emacs. (line 6)
|
2713
|
-
* Exact division functions: Integer Division. (line
|
2639
|
+
* Exact division functions: Integer Division. (line 125)
|
2714
2640
|
* Exact remainder: Exact Remainder. (line 6)
|
2715
2641
|
* Example programs: Demonstration Programs.
|
2716
2642
|
(line 6)
|
2717
2643
|
* Exec prefix: Build Options. (line 32)
|
2718
|
-
* Execution profiling
|
2719
|
-
* Execution profiling
|
2720
|
-
* Exponentiation functions <1>: Float Arithmetic. (line 41)
|
2644
|
+
* Execution profiling: Build Options. (line 317)
|
2645
|
+
* Execution profiling <1>: Profiling. (line 6)
|
2721
2646
|
* Exponentiation functions: Integer Exponentiation.
|
2722
2647
|
(line 6)
|
2648
|
+
* Exponentiation functions <1>: Float Arithmetic. (line 41)
|
2723
2649
|
* Export: Integer Import and Export.
|
2724
2650
|
(line 45)
|
2725
2651
|
* Expression parsing demo: Demonstration Programs.
|
2726
2652
|
(line 15)
|
2653
|
+
* Expression parsing demo <1>: Demonstration Programs.
|
2654
|
+
(line 17)
|
2655
|
+
* Expression parsing demo <2>: Demonstration Programs.
|
2656
|
+
(line 19)
|
2727
2657
|
* Extended GCD: Number Theoretic Functions.
|
2728
2658
|
(line 43)
|
2729
2659
|
* Factor removal functions: Number Theoretic Functions.
|
@@ -2732,26 +2662,26 @@ Concept Index
|
|
2732
2662
|
* Factorial functions: Number Theoretic Functions.
|
2733
2663
|
(line 112)
|
2734
2664
|
* Factorization demo: Demonstration Programs.
|
2735
|
-
(line
|
2665
|
+
(line 22)
|
2736
2666
|
* Fast Fourier Transform: FFT Multiplication. (line 6)
|
2737
|
-
* Fat binary: Build Options. (line
|
2667
|
+
* Fat binary: Build Options. (line 160)
|
2668
|
+
* FFT multiplication: Build Options. (line 307)
|
2738
2669
|
* FFT multiplication <1>: FFT Multiplication. (line 6)
|
2739
|
-
* FFT multiplication: Build Options. (line 313)
|
2740
2670
|
* Fibonacci number algorithm: Fibonacci Numbers Algorithm.
|
2741
2671
|
(line 6)
|
2742
2672
|
* Fibonacci sequence functions: Number Theoretic Functions.
|
2743
2673
|
(line 132)
|
2744
2674
|
* Float arithmetic functions: Float Arithmetic. (line 6)
|
2675
|
+
* Float assignment functions: Assigning Floats. (line 6)
|
2745
2676
|
* Float assignment functions <1>: Simultaneous Float Init & Assign.
|
2746
2677
|
(line 6)
|
2747
|
-
* Float assignment functions: Assigning Floats. (line 6)
|
2748
2678
|
* Float comparison functions: Float Comparison. (line 6)
|
2749
2679
|
* Float conversion functions: Converting Floats. (line 6)
|
2750
2680
|
* Float functions: Floating-point Functions.
|
2751
2681
|
(line 6)
|
2682
|
+
* Float initialization functions: Initializing Floats. (line 6)
|
2752
2683
|
* Float initialization functions <1>: Simultaneous Float Init & Assign.
|
2753
2684
|
(line 6)
|
2754
|
-
* Float initialization functions: Initializing Floats. (line 6)
|
2755
2685
|
* Float input and output functions: I/O of Floats. (line 6)
|
2756
2686
|
* Float internals: Float Internals. (line 6)
|
2757
2687
|
* Float miscellaneous functions: Miscellaneous Float Functions.
|
@@ -2774,29 +2704,31 @@ Concept Index
|
|
2774
2704
|
(line 6)
|
2775
2705
|
* FreeBSD: Notes for Particular Systems.
|
2776
2706
|
(line 43)
|
2777
|
-
*
|
2778
|
-
|
2707
|
+
* FreeBSD <1>: Notes for Particular Systems.
|
2708
|
+
(line 52)
|
2709
|
+
* frexp: Converting Integers. (line 43)
|
2710
|
+
* frexp <1>: Converting Floats. (line 24)
|
2779
2711
|
* FTP of latest version: Introduction to GMP. (line 37)
|
2780
2712
|
* Function classes: Function Classes. (line 6)
|
2781
2713
|
* FunctionCheck: Profiling. (line 77)
|
2782
|
-
* GCC Checker: Debugging. (line
|
2714
|
+
* GCC Checker: Debugging. (line 114)
|
2783
2715
|
* GCD algorithms: Greatest Common Divisor Algorithms.
|
2784
2716
|
(line 6)
|
2785
2717
|
* GCD extended: Number Theoretic Functions.
|
2786
2718
|
(line 43)
|
2787
2719
|
* GCD functions: Number Theoretic Functions.
|
2788
2720
|
(line 26)
|
2789
|
-
* GDB: Debugging. (line
|
2790
|
-
* Generic C: Build Options. (line
|
2721
|
+
* GDB: Debugging. (line 57)
|
2722
|
+
* Generic C: Build Options. (line 151)
|
2791
2723
|
* GMP Perl module: Demonstration Programs.
|
2792
|
-
(line
|
2724
|
+
(line 28)
|
2793
2725
|
* GMP version number: Useful Macros and Constants.
|
2794
2726
|
(line 12)
|
2795
2727
|
* gmp.h: Headers and Libraries.
|
2796
2728
|
(line 6)
|
2797
2729
|
* gmpxx.h: C++ Interface General.
|
2798
2730
|
(line 8)
|
2799
|
-
* GNU Debugger: Debugging. (line
|
2731
|
+
* GNU Debugger: Debugging. (line 57)
|
2800
2732
|
* GNU Free Documentation License: GNU Free Documentation License.
|
2801
2733
|
(line 6)
|
2802
2734
|
* GNU strip: Known Build Problems.
|
@@ -2810,40 +2742,41 @@ Concept Index
|
|
2810
2742
|
(line 34)
|
2811
2743
|
* Headers: Headers and Libraries.
|
2812
2744
|
(line 6)
|
2813
|
-
* Heap problems: Debugging. (line
|
2745
|
+
* Heap problems: Debugging. (line 23)
|
2814
2746
|
* Home page: Introduction to GMP. (line 33)
|
2815
|
-
* Host system: Build Options. (line
|
2816
|
-
* HP-UX: ABI and ISA. (line
|
2817
|
-
*
|
2818
|
-
*
|
2747
|
+
* Host system: Build Options. (line 65)
|
2748
|
+
* HP-UX: ABI and ISA. (line 76)
|
2749
|
+
* HP-UX <1>: ABI and ISA. (line 114)
|
2750
|
+
* HPPA: ABI and ISA. (line 76)
|
2751
|
+
* I/O functions: I/O of Integers. (line 6)
|
2752
|
+
* I/O functions <1>: I/O of Rationals. (line 6)
|
2819
2753
|
* I/O functions <2>: I/O of Floats. (line 6)
|
2820
|
-
* I/O functions: I/O of Rationals. (line 6)
|
2821
2754
|
* i386: Notes for Particular Systems.
|
2822
2755
|
(line 150)
|
2823
|
-
* IA-64: ABI and ISA. (line
|
2756
|
+
* IA-64: ABI and ISA. (line 114)
|
2824
2757
|
* Import: Integer Import and Export.
|
2825
2758
|
(line 11)
|
2826
2759
|
* In-place operations: Efficiency. (line 57)
|
2827
2760
|
* Include files: Headers and Libraries.
|
2828
2761
|
(line 6)
|
2829
2762
|
* info-lookup-symbol: Emacs. (line 6)
|
2830
|
-
* Initialization functions
|
2831
|
-
* Initialization functions <2>: Random State Initialization.
|
2763
|
+
* Initialization functions: Initializing Integers.
|
2832
2764
|
(line 6)
|
2833
|
-
* Initialization functions <
|
2765
|
+
* Initialization functions <1>: Simultaneous Integer Init & Assign.
|
2834
2766
|
(line 6)
|
2835
|
-
* Initialization functions <
|
2767
|
+
* Initialization functions <2>: Initializing Rationals.
|
2836
2768
|
(line 6)
|
2837
|
-
* Initialization functions <
|
2769
|
+
* Initialization functions <3>: Initializing Floats. (line 6)
|
2770
|
+
* Initialization functions <4>: Simultaneous Float Init & Assign.
|
2838
2771
|
(line 6)
|
2839
|
-
* Initialization functions
|
2772
|
+
* Initialization functions <5>: Random State Initialization.
|
2840
2773
|
(line 6)
|
2841
2774
|
* Initializing and clearing: Efficiency. (line 21)
|
2842
|
-
* Input functions <1>: Formatted Input Functions.
|
2843
|
-
(line 6)
|
2844
|
-
* Input functions <2>: I/O of Rationals. (line 6)
|
2845
|
-
* Input functions <3>: I/O of Floats. (line 6)
|
2846
2775
|
* Input functions: I/O of Integers. (line 6)
|
2776
|
+
* Input functions <1>: I/O of Rationals. (line 6)
|
2777
|
+
* Input functions <2>: I/O of Floats. (line 6)
|
2778
|
+
* Input functions <3>: Formatted Input Functions.
|
2779
|
+
(line 6)
|
2847
2780
|
* Install prefix: Build Options. (line 32)
|
2848
2781
|
* Installing GMP: Installing GMP. (line 6)
|
2849
2782
|
* Instruction Set Architecture: ABI and ISA. (line 6)
|
@@ -2851,8 +2784,8 @@ Concept Index
|
|
2851
2784
|
* Integer: Nomenclature and Types.
|
2852
2785
|
(line 6)
|
2853
2786
|
* Integer arithmetic functions: Integer Arithmetic. (line 6)
|
2854
|
-
* Integer assignment functions
|
2855
|
-
* Integer assignment functions
|
2787
|
+
* Integer assignment functions: Assigning Integers. (line 6)
|
2788
|
+
* Integer assignment functions <1>: Simultaneous Integer Init & Assign.
|
2856
2789
|
(line 6)
|
2857
2790
|
* Integer bit manipulation functions: Integer Logic and Bit Fiddling.
|
2858
2791
|
(line 6)
|
@@ -2866,9 +2799,9 @@ Concept Index
|
|
2866
2799
|
* Integer functions: Integer Functions. (line 6)
|
2867
2800
|
* Integer import: Integer Import and Export.
|
2868
2801
|
(line 11)
|
2869
|
-
* Integer initialization functions
|
2802
|
+
* Integer initialization functions: Initializing Integers.
|
2870
2803
|
(line 6)
|
2871
|
-
* Integer initialization functions
|
2804
|
+
* Integer initialization functions <1>: Simultaneous Integer Init & Assign.
|
2872
2805
|
(line 6)
|
2873
2806
|
* Integer input and output functions: I/O of Integers. (line 6)
|
2874
2807
|
* Integer internals: Integer Internals. (line 6)
|
@@ -2888,8 +2821,8 @@ Concept Index
|
|
2888
2821
|
* Introduction: Introduction to GMP. (line 6)
|
2889
2822
|
* Inverse modulo functions: Number Theoretic Functions.
|
2890
2823
|
(line 70)
|
2891
|
-
* IRIX
|
2892
|
-
* IRIX
|
2824
|
+
* IRIX: ABI and ISA. (line 139)
|
2825
|
+
* IRIX <1>: Known Build Problems.
|
2893
2826
|
(line 38)
|
2894
2827
|
* ISA: ABI and ISA. (line 6)
|
2895
2828
|
* istream input: C++ Formatted Input. (line 6)
|
@@ -2928,6 +2861,8 @@ Concept Index
|
|
2928
2861
|
* Linear congruential algorithm: Random Number Algorithms.
|
2929
2862
|
(line 25)
|
2930
2863
|
* Linear congruential random numbers: Random State Initialization.
|
2864
|
+
(line 18)
|
2865
|
+
* Linear congruential random numbers <1>: Random State Initialization.
|
2931
2866
|
(line 32)
|
2932
2867
|
* Linking: Headers and Libraries.
|
2933
2868
|
(line 22)
|
@@ -2942,8 +2877,8 @@ Concept Index
|
|
2942
2877
|
* MacOS X: Known Build Problems.
|
2943
2878
|
(line 51)
|
2944
2879
|
* Mailing lists: Introduction to GMP. (line 44)
|
2945
|
-
* Malloc debugger: Debugging. (line
|
2946
|
-
* Malloc problems: Debugging. (line
|
2880
|
+
* Malloc debugger: Debugging. (line 29)
|
2881
|
+
* Malloc problems: Debugging. (line 23)
|
2947
2882
|
* Memory allocation: Custom Allocation. (line 6)
|
2948
2883
|
* Memory management: Memory Management. (line 6)
|
2949
2884
|
* Mersenne twister algorithm: Random Number Algorithms.
|
@@ -2952,7 +2887,7 @@ Concept Index
|
|
2952
2887
|
(line 13)
|
2953
2888
|
* MINGW: Notes for Particular Systems.
|
2954
2889
|
(line 57)
|
2955
|
-
* MIPS: ABI and ISA. (line
|
2890
|
+
* MIPS: ABI and ISA. (line 139)
|
2956
2891
|
* Miscellaneous float functions: Miscellaneous Float Functions.
|
2957
2892
|
(line 6)
|
2958
2893
|
* Miscellaneous integer functions: Miscellaneous Integer Functions.
|
@@ -2963,16 +2898,18 @@ Concept Index
|
|
2963
2898
|
(line 70)
|
2964
2899
|
* Most significant bit: Miscellaneous Integer Functions.
|
2965
2900
|
(line 34)
|
2966
|
-
* MPN_PATH: Build Options. (line
|
2901
|
+
* MPN_PATH: Build Options. (line 321)
|
2967
2902
|
* MS Windows: Notes for Particular Systems.
|
2968
2903
|
(line 57)
|
2904
|
+
* MS Windows <1>: Notes for Particular Systems.
|
2905
|
+
(line 70)
|
2969
2906
|
* MS-DOS: Notes for Particular Systems.
|
2970
2907
|
(line 57)
|
2971
2908
|
* Multi-threading: Reentrancy. (line 6)
|
2972
2909
|
* Multiplication algorithms: Multiplication Algorithms.
|
2973
2910
|
(line 6)
|
2974
|
-
* Nails: Low-level Functions. (line
|
2975
|
-
* Native compilation: Build Options. (line
|
2911
|
+
* Nails: Low-level Functions. (line 685)
|
2912
|
+
* Native compilation: Build Options. (line 51)
|
2976
2913
|
* NetBSD: Notes for Particular Systems.
|
2977
2914
|
(line 100)
|
2978
2915
|
* NeXT: Known Build Problems.
|
@@ -2983,13 +2920,13 @@ Concept Index
|
|
2983
2920
|
(line 6)
|
2984
2921
|
* Non-Unix systems: Build Options. (line 11)
|
2985
2922
|
* Nth root algorithm: Nth Root Algorithm. (line 6)
|
2986
|
-
* Number sequences: Efficiency. (line
|
2923
|
+
* Number sequences: Efficiency. (line 145)
|
2987
2924
|
* Number theoretic functions: Number Theoretic Functions.
|
2988
2925
|
(line 6)
|
2989
2926
|
* Numerator and denominator: Applying Integer Functions.
|
2990
2927
|
(line 6)
|
2991
2928
|
* obstack output: Formatted Output Functions.
|
2992
|
-
(line
|
2929
|
+
(line 79)
|
2993
2930
|
* OpenBSD: Notes for Particular Systems.
|
2994
2931
|
(line 109)
|
2995
2932
|
* Optimizing performance: Performance optimization.
|
@@ -2997,22 +2934,26 @@ Concept Index
|
|
2997
2934
|
* ostream output: C++ Formatted Output.
|
2998
2935
|
(line 6)
|
2999
2936
|
* Other languages: Language Bindings. (line 6)
|
3000
|
-
* Output functions
|
2937
|
+
* Output functions: I/O of Integers. (line 6)
|
2938
|
+
* Output functions <1>: I/O of Rationals. (line 6)
|
2939
|
+
* Output functions <2>: I/O of Floats. (line 6)
|
2940
|
+
* Output functions <3>: Formatted Output Functions.
|
3001
2941
|
(line 6)
|
3002
|
-
* Output functions <2>: I/O of Rationals. (line 6)
|
3003
|
-
* Output functions <3>: I/O of Integers. (line 6)
|
3004
|
-
* Output functions: I/O of Floats. (line 6)
|
3005
2942
|
* Packaged builds: Notes for Package Builds.
|
3006
2943
|
(line 6)
|
3007
2944
|
* Parameter conventions: Parameter Conventions.
|
3008
2945
|
(line 6)
|
3009
2946
|
* Parsing expressions demo: Demonstration Programs.
|
3010
|
-
(line
|
2947
|
+
(line 15)
|
2948
|
+
* Parsing expressions demo <1>: Demonstration Programs.
|
2949
|
+
(line 17)
|
2950
|
+
* Parsing expressions demo <2>: Demonstration Programs.
|
2951
|
+
(line 19)
|
3011
2952
|
* Particular systems: Notes for Particular Systems.
|
3012
2953
|
(line 6)
|
3013
2954
|
* Past GMP versions: Compatibility with older versions.
|
3014
2955
|
(line 6)
|
3015
|
-
* PDF: Build Options. (line
|
2956
|
+
* PDF: Build Options. (line 336)
|
3016
2957
|
* Perfect power algorithm: Perfect Power Algorithm.
|
3017
2958
|
(line 6)
|
3018
2959
|
* Perfect power functions: Integer Roots. (line 28)
|
@@ -3020,19 +2961,19 @@ Concept Index
|
|
3020
2961
|
(line 6)
|
3021
2962
|
* Perfect square functions: Integer Roots. (line 37)
|
3022
2963
|
* perl: Demonstration Programs.
|
3023
|
-
(line
|
2964
|
+
(line 28)
|
3024
2965
|
* Perl module: Demonstration Programs.
|
3025
|
-
(line
|
3026
|
-
* Postscript: Build Options. (line
|
3027
|
-
* Power/PowerPC <1>: Known Build Problems.
|
3028
|
-
(line 63)
|
2966
|
+
(line 28)
|
2967
|
+
* Postscript: Build Options. (line 336)
|
3029
2968
|
* Power/PowerPC: Notes for Particular Systems.
|
3030
2969
|
(line 115)
|
2970
|
+
* Power/PowerPC <1>: Known Build Problems.
|
2971
|
+
(line 63)
|
3031
2972
|
* Powering algorithms: Powering Algorithms. (line 6)
|
3032
|
-
* Powering functions <1>: Float Arithmetic. (line 41)
|
3033
2973
|
* Powering functions: Integer Exponentiation.
|
3034
2974
|
(line 6)
|
3035
|
-
*
|
2975
|
+
* Powering functions <1>: Float Arithmetic. (line 41)
|
2976
|
+
* PowerPC: ABI and ISA. (line 173)
|
3036
2977
|
* Precision of floats: Floating-point Functions.
|
3037
2978
|
(line 6)
|
3038
2979
|
* Precision of hardware floating point: Notes for Particular Systems.
|
@@ -3053,19 +2994,19 @@ Concept Index
|
|
3053
2994
|
(line 6)
|
3054
2995
|
* Random number algorithms: Random Number Algorithms.
|
3055
2996
|
(line 6)
|
3056
|
-
* Random number functions
|
2997
|
+
* Random number functions: Integer Random Numbers.
|
3057
2998
|
(line 6)
|
2999
|
+
* Random number functions <1>: Miscellaneous Float Functions.
|
3000
|
+
(line 27)
|
3058
3001
|
* Random number functions <2>: Random Number Functions.
|
3059
3002
|
(line 6)
|
3060
|
-
* Random number functions: Miscellaneous Float Functions.
|
3061
|
-
(line 27)
|
3062
3003
|
* Random number seeding: Random State Seeding.
|
3063
3004
|
(line 6)
|
3064
3005
|
* Random number state: Random State Initialization.
|
3065
3006
|
(line 6)
|
3066
3007
|
* Random state: Nomenclature and Types.
|
3067
3008
|
(line 46)
|
3068
|
-
* Rational arithmetic: Efficiency. (line
|
3009
|
+
* Rational arithmetic: Efficiency. (line 111)
|
3069
3010
|
* Rational arithmetic functions: Rational Arithmetic. (line 6)
|
3070
3011
|
* Rational assignment functions: Initializing Rationals.
|
3071
3012
|
(line 6)
|
@@ -3087,22 +3028,23 @@ Concept Index
|
|
3087
3028
|
(line 6)
|
3088
3029
|
* Reallocations: Efficiency. (line 30)
|
3089
3030
|
* Reentrancy: Reentrancy. (line 6)
|
3090
|
-
* References: References. (line
|
3031
|
+
* References: References. (line 5)
|
3091
3032
|
* Remove factor functions: Number Theoretic Functions.
|
3092
3033
|
(line 104)
|
3093
3034
|
* Reporting bugs: Reporting Bugs. (line 6)
|
3094
3035
|
* Root extraction algorithm: Nth Root Algorithm. (line 6)
|
3095
3036
|
* Root extraction algorithms: Root Extraction Algorithms.
|
3096
3037
|
(line 6)
|
3097
|
-
* Root extraction functions <1>: Float Arithmetic. (line 37)
|
3098
3038
|
* Root extraction functions: Integer Roots. (line 6)
|
3039
|
+
* Root extraction functions <1>: Float Arithmetic. (line 37)
|
3099
3040
|
* Root testing functions: Integer Roots. (line 28)
|
3041
|
+
* Root testing functions <1>: Integer Roots. (line 37)
|
3100
3042
|
* Rounding functions: Miscellaneous Float Functions.
|
3101
3043
|
(line 9)
|
3102
3044
|
* Sample programs: Demonstration Programs.
|
3103
3045
|
(line 6)
|
3104
3046
|
* Scan bit functions: Integer Logic and Bit Fiddling.
|
3105
|
-
(line
|
3047
|
+
(line 39)
|
3106
3048
|
* scanf formatted input: Formatted Input. (line 6)
|
3107
3049
|
* SCO: Known Build Problems.
|
3108
3050
|
(line 38)
|
@@ -3115,27 +3057,31 @@ Concept Index
|
|
3115
3057
|
(line 65)
|
3116
3058
|
* Shared library versioning: Notes for Package Builds.
|
3117
3059
|
(line 9)
|
3060
|
+
* Sign tests: Integer Comparisons. (line 28)
|
3118
3061
|
* Sign tests <1>: Comparing Rationals. (line 28)
|
3119
3062
|
* Sign tests <2>: Float Comparison. (line 34)
|
3120
|
-
* Sign tests: Integer Comparisons. (line 28)
|
3121
3063
|
* Size in digits: Miscellaneous Integer Functions.
|
3122
3064
|
(line 23)
|
3123
3065
|
* Small operands: Efficiency. (line 7)
|
3124
|
-
* Solaris
|
3125
|
-
* Solaris
|
3066
|
+
* Solaris: ABI and ISA. (line 204)
|
3067
|
+
* Solaris <1>: Known Build Problems.
|
3126
3068
|
(line 72)
|
3069
|
+
* Solaris <2>: Known Build Problems.
|
3070
|
+
(line 77)
|
3127
3071
|
* Sparc: Notes for Particular Systems.
|
3128
3072
|
(line 127)
|
3129
|
-
* Sparc
|
3073
|
+
* Sparc <1>: Notes for Particular Systems.
|
3074
|
+
(line 132)
|
3075
|
+
* Sparc V9: ABI and ISA. (line 204)
|
3130
3076
|
* Special integer functions: Integer Special Functions.
|
3131
3077
|
(line 6)
|
3132
3078
|
* Square root algorithm: Square Root Algorithm.
|
3133
3079
|
(line 6)
|
3134
3080
|
* SSE2: Notes for Particular Systems.
|
3135
3081
|
(line 156)
|
3136
|
-
* Stack backtrace: Debugging. (line
|
3082
|
+
* Stack backtrace: Debugging. (line 49)
|
3083
|
+
* Stack overflow: Build Options. (line 273)
|
3137
3084
|
* Stack overflow <1>: Debugging. (line 7)
|
3138
|
-
* Stack overflow: Build Options. (line 274)
|
3139
3085
|
* Static linking: Efficiency. (line 14)
|
3140
3086
|
* stdarg.h: Headers and Libraries.
|
3141
3087
|
(line 17)
|
@@ -3143,22 +3089,22 @@ Concept Index
|
|
3143
3089
|
(line 11)
|
3144
3090
|
* Stripped libraries: Known Build Problems.
|
3145
3091
|
(line 28)
|
3146
|
-
* Sun: ABI and ISA. (line
|
3092
|
+
* Sun: ABI and ISA. (line 204)
|
3147
3093
|
* SunOS: Notes for Particular Systems.
|
3148
3094
|
(line 144)
|
3149
3095
|
* Systems: Notes for Particular Systems.
|
3150
3096
|
(line 6)
|
3151
|
-
* Temporary memory: Build Options. (line
|
3152
|
-
* Texinfo: Build Options. (line
|
3153
|
-
* Text input/output: Efficiency. (line
|
3097
|
+
* Temporary memory: Build Options. (line 273)
|
3098
|
+
* Texinfo: Build Options. (line 333)
|
3099
|
+
* Text input/output: Efficiency. (line 151)
|
3154
3100
|
* Thread safety: Reentrancy. (line 6)
|
3155
|
-
* Toom multiplication
|
3101
|
+
* Toom multiplication: Toom 3-Way Multiplication.
|
3156
3102
|
(line 6)
|
3157
|
-
* Toom multiplication <
|
3103
|
+
* Toom multiplication <1>: Toom 4-Way Multiplication.
|
3158
3104
|
(line 6)
|
3159
|
-
* Toom multiplication <
|
3105
|
+
* Toom multiplication <2>: Higher degree Toom'n'half.
|
3160
3106
|
(line 6)
|
3161
|
-
* Toom multiplication
|
3107
|
+
* Toom multiplication <3>: Other Multiplication.
|
3162
3108
|
(line 6)
|
3163
3109
|
* Types: Nomenclature and Types.
|
3164
3110
|
(line 6)
|
@@ -3171,19 +3117,21 @@ Concept Index
|
|
3171
3117
|
(line 6)
|
3172
3118
|
* User-defined precision: Floating-point Functions.
|
3173
3119
|
(line 6)
|
3174
|
-
* Valgrind: Debugging. (line
|
3120
|
+
* Valgrind: Debugging. (line 129)
|
3175
3121
|
* Variable conventions: Variable Conventions.
|
3176
3122
|
(line 6)
|
3177
3123
|
* Version number: Useful Macros and Constants.
|
3178
3124
|
(line 12)
|
3179
3125
|
* Web page: Introduction to GMP. (line 33)
|
3180
3126
|
* Windows: Notes for Particular Systems.
|
3127
|
+
(line 57)
|
3128
|
+
* Windows <1>: Notes for Particular Systems.
|
3181
3129
|
(line 70)
|
3182
3130
|
* x86: Notes for Particular Systems.
|
3183
3131
|
(line 150)
|
3184
3132
|
* x87: Notes for Particular Systems.
|
3185
3133
|
(line 34)
|
3186
|
-
* XML: Build Options. (line
|
3134
|
+
* XML: Build Options. (line 340)
|
3187
3135
|
|
3188
3136
|
|
3189
3137
|
File: gmp.info, Node: Function Index, Prev: Concept Index, Up: Top
|
@@ -3194,50 +3142,54 @@ Function and Type Index
|
|
3194
3142
|
[index]
|
3195
3143
|
* Menu:
|
3196
3144
|
|
3145
|
+
* _mpz_realloc: Integer Special Functions.
|
3146
|
+
(line 13)
|
3197
3147
|
* __GMP_CC: Useful Macros and Constants.
|
3198
|
-
(line
|
3148
|
+
(line 22)
|
3199
3149
|
* __GMP_CFLAGS: Useful Macros and Constants.
|
3200
|
-
(line
|
3150
|
+
(line 23)
|
3201
3151
|
* __GNU_MP_VERSION: Useful Macros and Constants.
|
3202
|
-
(line
|
3152
|
+
(line 9)
|
3203
3153
|
* __GNU_MP_VERSION_MINOR: Useful Macros and Constants.
|
3204
|
-
(line
|
3154
|
+
(line 10)
|
3205
3155
|
* __GNU_MP_VERSION_PATCHLEVEL: Useful Macros and Constants.
|
3206
|
-
(line
|
3207
|
-
*
|
3208
|
-
(line
|
3156
|
+
(line 11)
|
3157
|
+
* abs: C++ Interface Integers.
|
3158
|
+
(line 46)
|
3209
3159
|
* abs <1>: C++ Interface Rationals.
|
3210
|
-
(line 49)
|
3211
|
-
* abs <2>: C++ Interface Integers.
|
3212
3160
|
(line 47)
|
3213
|
-
* abs
|
3214
|
-
(line
|
3161
|
+
* abs <2>: C++ Interface Floats.
|
3162
|
+
(line 82)
|
3215
3163
|
* ceil: C++ Interface Floats.
|
3216
|
-
(line
|
3217
|
-
* cmp
|
3218
|
-
(line
|
3219
|
-
* cmp <
|
3164
|
+
(line 83)
|
3165
|
+
* cmp: C++ Interface Integers.
|
3166
|
+
(line 47)
|
3167
|
+
* cmp <1>: C++ Interface Integers.
|
3168
|
+
(line 48)
|
3169
|
+
* cmp <2>: C++ Interface Rationals.
|
3220
3170
|
(line 48)
|
3221
3171
|
* cmp <3>: C++ Interface Rationals.
|
3222
|
-
(line
|
3223
|
-
* cmp
|
3224
|
-
(line
|
3172
|
+
(line 49)
|
3173
|
+
* cmp <4>: C++ Interface Floats.
|
3174
|
+
(line 84)
|
3175
|
+
* cmp <5>: C++ Interface Floats.
|
3176
|
+
(line 85)
|
3225
3177
|
* floor: C++ Interface Floats.
|
3226
|
-
(line
|
3178
|
+
(line 95)
|
3227
3179
|
* gcd: C++ Interface Integers.
|
3228
|
-
(line
|
3180
|
+
(line 68)
|
3229
3181
|
* gmp_asprintf: Formatted Output Functions.
|
3230
|
-
(line
|
3182
|
+
(line 63)
|
3231
3183
|
* gmp_errno: Random State Initialization.
|
3232
|
-
(line
|
3184
|
+
(line 56)
|
3233
3185
|
* GMP_ERROR_INVALID_ARGUMENT: Random State Initialization.
|
3234
|
-
(line
|
3186
|
+
(line 56)
|
3235
3187
|
* GMP_ERROR_UNSUPPORTED_ARGUMENT: Random State Initialization.
|
3236
|
-
(line
|
3188
|
+
(line 56)
|
3237
3189
|
* gmp_fprintf: Formatted Output Functions.
|
3238
|
-
(line
|
3190
|
+
(line 28)
|
3239
3191
|
* gmp_fscanf: Formatted Input Functions.
|
3240
|
-
(line
|
3192
|
+
(line 24)
|
3241
3193
|
* GMP_LIMB_BITS: Low-level Functions. (line 713)
|
3242
3194
|
* GMP_NAIL_BITS: Low-level Functions. (line 711)
|
3243
3195
|
* GMP_NAIL_MASK: Low-level Functions. (line 721)
|
@@ -3245,100 +3197,96 @@ Function and Type Index
|
|
3245
3197
|
* GMP_NUMB_MASK: Low-level Functions. (line 722)
|
3246
3198
|
* GMP_NUMB_MAX: Low-level Functions. (line 730)
|
3247
3199
|
* gmp_obstack_printf: Formatted Output Functions.
|
3248
|
-
(line
|
3200
|
+
(line 75)
|
3249
3201
|
* gmp_obstack_vprintf: Formatted Output Functions.
|
3250
|
-
(line
|
3202
|
+
(line 77)
|
3251
3203
|
* gmp_printf: Formatted Output Functions.
|
3252
|
-
(line
|
3253
|
-
* GMP_RAND_ALG_DEFAULT: Random State Initialization.
|
3254
|
-
(line 49)
|
3255
|
-
* GMP_RAND_ALG_LC: Random State Initialization.
|
3256
|
-
(line 49)
|
3204
|
+
(line 23)
|
3257
3205
|
* gmp_randclass: C++ Interface Random Numbers.
|
3258
|
-
(line
|
3206
|
+
(line 6)
|
3259
3207
|
* gmp_randclass::get_f: C++ Interface Random Numbers.
|
3260
|
-
(line
|
3208
|
+
(line 44)
|
3209
|
+
* gmp_randclass::get_f <1>: C++ Interface Random Numbers.
|
3210
|
+
(line 45)
|
3261
3211
|
* gmp_randclass::get_z_bits: C++ Interface Random Numbers.
|
3262
|
-
(line
|
3212
|
+
(line 37)
|
3213
|
+
* gmp_randclass::get_z_bits <1>: C++ Interface Random Numbers.
|
3214
|
+
(line 38)
|
3263
3215
|
* gmp_randclass::get_z_range: C++ Interface Random Numbers.
|
3264
|
-
(line
|
3216
|
+
(line 41)
|
3265
3217
|
* gmp_randclass::gmp_randclass: C++ Interface Random Numbers.
|
3266
|
-
(line
|
3218
|
+
(line 11)
|
3219
|
+
* gmp_randclass::gmp_randclass <1>: C++ Interface Random Numbers.
|
3220
|
+
(line 26)
|
3267
3221
|
* gmp_randclass::seed: C++ Interface Random Numbers.
|
3268
|
-
(line
|
3222
|
+
(line 32)
|
3223
|
+
* gmp_randclass::seed <1>: C++ Interface Random Numbers.
|
3224
|
+
(line 33)
|
3269
3225
|
* gmp_randclear: Random State Initialization.
|
3270
3226
|
(line 62)
|
3271
3227
|
* gmp_randinit: Random State Initialization.
|
3272
|
-
(line
|
3228
|
+
(line 45)
|
3273
3229
|
* gmp_randinit_default: Random State Initialization.
|
3274
|
-
(line
|
3230
|
+
(line 6)
|
3275
3231
|
* gmp_randinit_lc_2exp: Random State Initialization.
|
3276
|
-
(line
|
3232
|
+
(line 16)
|
3277
3233
|
* gmp_randinit_lc_2exp_size: Random State Initialization.
|
3278
|
-
(line
|
3234
|
+
(line 30)
|
3279
3235
|
* gmp_randinit_mt: Random State Initialization.
|
3280
|
-
(line
|
3236
|
+
(line 12)
|
3281
3237
|
* gmp_randinit_set: Random State Initialization.
|
3282
|
-
(line
|
3238
|
+
(line 41)
|
3283
3239
|
* gmp_randseed: Random State Seeding.
|
3284
|
-
(line
|
3240
|
+
(line 6)
|
3285
3241
|
* gmp_randseed_ui: Random State Seeding.
|
3286
|
-
(line
|
3242
|
+
(line 8)
|
3287
3243
|
* gmp_randstate_t: Nomenclature and Types.
|
3288
3244
|
(line 46)
|
3245
|
+
* GMP_RAND_ALG_DEFAULT: Random State Initialization.
|
3246
|
+
(line 50)
|
3247
|
+
* GMP_RAND_ALG_LC: Random State Initialization.
|
3248
|
+
(line 50)
|
3289
3249
|
* gmp_scanf: Formatted Input Functions.
|
3290
|
-
(line
|
3250
|
+
(line 20)
|
3291
3251
|
* gmp_snprintf: Formatted Output Functions.
|
3292
|
-
(line
|
3252
|
+
(line 44)
|
3293
3253
|
* gmp_sprintf: Formatted Output Functions.
|
3294
|
-
(line
|
3254
|
+
(line 33)
|
3295
3255
|
* gmp_sscanf: Formatted Input Functions.
|
3296
|
-
(line
|
3256
|
+
(line 28)
|
3297
3257
|
* gmp_urandomb_ui: Random State Miscellaneous.
|
3298
|
-
(line
|
3258
|
+
(line 6)
|
3299
3259
|
* gmp_urandomm_ui: Random State Miscellaneous.
|
3300
|
-
(line
|
3260
|
+
(line 12)
|
3301
3261
|
* gmp_vasprintf: Formatted Output Functions.
|
3302
|
-
(line
|
3262
|
+
(line 64)
|
3303
3263
|
* gmp_version: Useful Macros and Constants.
|
3304
3264
|
(line 18)
|
3305
3265
|
* gmp_vfprintf: Formatted Output Functions.
|
3306
|
-
(line
|
3266
|
+
(line 29)
|
3307
3267
|
* gmp_vfscanf: Formatted Input Functions.
|
3308
|
-
(line 26)
|
3309
|
-
* gmp_vprintf: Formatted Output Functions.
|
3310
3268
|
(line 25)
|
3269
|
+
* gmp_vprintf: Formatted Output Functions.
|
3270
|
+
(line 24)
|
3311
3271
|
* gmp_vscanf: Formatted Input Functions.
|
3312
|
-
(line
|
3272
|
+
(line 21)
|
3313
3273
|
* gmp_vsnprintf: Formatted Output Functions.
|
3314
|
-
(line
|
3274
|
+
(line 46)
|
3315
3275
|
* gmp_vsprintf: Formatted Output Functions.
|
3316
|
-
(line
|
3276
|
+
(line 34)
|
3317
3277
|
* gmp_vsscanf: Formatted Input Functions.
|
3318
|
-
(line
|
3278
|
+
(line 29)
|
3319
3279
|
* hypot: C++ Interface Floats.
|
3320
|
-
(line
|
3280
|
+
(line 96)
|
3321
3281
|
* lcm: C++ Interface Integers.
|
3322
|
-
(line
|
3323
|
-
*
|
3324
|
-
|
3325
|
-
*
|
3326
|
-
(line 7)
|
3327
|
-
* mp_exp_t: Nomenclature and Types.
|
3328
|
-
(line 27)
|
3329
|
-
* mp_get_memory_functions: Custom Allocation. (line 90)
|
3330
|
-
* mp_limb_t: Nomenclature and Types.
|
3331
|
-
(line 31)
|
3332
|
-
* mp_set_memory_functions: Custom Allocation. (line 18)
|
3333
|
-
* mp_size_t: Nomenclature and Types.
|
3334
|
-
(line 37)
|
3335
|
-
* mpf_abs: Float Arithmetic. (line 47)
|
3336
|
-
* mpf_add: Float Arithmetic. (line 7)
|
3337
|
-
* mpf_add_ui: Float Arithmetic. (line 9)
|
3282
|
+
(line 69)
|
3283
|
+
* mpf_abs: Float Arithmetic. (line 46)
|
3284
|
+
* mpf_add: Float Arithmetic. (line 6)
|
3285
|
+
* mpf_add_ui: Float Arithmetic. (line 7)
|
3338
3286
|
* mpf_ceil: Miscellaneous Float Functions.
|
3339
|
-
(line
|
3287
|
+
(line 6)
|
3340
3288
|
* mpf_class: C++ Interface General.
|
3341
|
-
(line
|
3289
|
+
(line 19)
|
3342
3290
|
* mpf_class::fits_sint_p: C++ Interface Floats.
|
3343
3291
|
(line 87)
|
3344
3292
|
* mpf_class::fits_slong_p: C++ Interface Floats.
|
@@ -3346,297 +3294,323 @@ Function and Type Index
|
|
3346
3294
|
* mpf_class::fits_sshort_p: C++ Interface Floats.
|
3347
3295
|
(line 89)
|
3348
3296
|
* mpf_class::fits_uint_p: C++ Interface Floats.
|
3349
|
-
(line 90)
|
3350
|
-
* mpf_class::fits_ulong_p: C++ Interface Floats.
|
3351
3297
|
(line 91)
|
3352
|
-
* mpf_class::
|
3298
|
+
* mpf_class::fits_ulong_p: C++ Interface Floats.
|
3353
3299
|
(line 92)
|
3300
|
+
* mpf_class::fits_ushort_p: C++ Interface Floats.
|
3301
|
+
(line 93)
|
3354
3302
|
* mpf_class::get_d: C++ Interface Floats.
|
3355
|
-
(line
|
3303
|
+
(line 98)
|
3356
3304
|
* mpf_class::get_mpf_t: C++ Interface General.
|
3357
|
-
(line
|
3305
|
+
(line 65)
|
3358
3306
|
* mpf_class::get_prec: C++ Interface Floats.
|
3359
|
-
(line
|
3307
|
+
(line 120)
|
3360
3308
|
* mpf_class::get_si: C++ Interface Floats.
|
3361
|
-
(line
|
3309
|
+
(line 99)
|
3362
3310
|
* mpf_class::get_str: C++ Interface Floats.
|
3363
|
-
(line
|
3311
|
+
(line 100)
|
3364
3312
|
* mpf_class::get_ui: C++ Interface Floats.
|
3365
|
-
(line
|
3313
|
+
(line 102)
|
3366
3314
|
* mpf_class::mpf_class: C++ Interface Floats.
|
3367
|
-
(line
|
3315
|
+
(line 11)
|
3316
|
+
* mpf_class::mpf_class <1>: C++ Interface Floats.
|
3317
|
+
(line 12)
|
3318
|
+
* mpf_class::mpf_class <2>: C++ Interface Floats.
|
3319
|
+
(line 32)
|
3320
|
+
* mpf_class::mpf_class <3>: C++ Interface Floats.
|
3321
|
+
(line 33)
|
3322
|
+
* mpf_class::mpf_class <4>: C++ Interface Floats.
|
3323
|
+
(line 41)
|
3324
|
+
* mpf_class::mpf_class <5>: C++ Interface Floats.
|
3325
|
+
(line 42)
|
3326
|
+
* mpf_class::mpf_class <6>: C++ Interface Floats.
|
3327
|
+
(line 44)
|
3328
|
+
* mpf_class::mpf_class <7>: C++ Interface Floats.
|
3329
|
+
(line 45)
|
3368
3330
|
* mpf_class::operator=: C++ Interface Floats.
|
3369
|
-
(line
|
3331
|
+
(line 59)
|
3370
3332
|
* mpf_class::set_prec: C++ Interface Floats.
|
3371
|
-
(line
|
3333
|
+
(line 121)
|
3372
3334
|
* mpf_class::set_prec_raw: C++ Interface Floats.
|
3373
|
-
(line
|
3335
|
+
(line 122)
|
3374
3336
|
* mpf_class::set_str: C++ Interface Floats.
|
3375
|
-
(line 101)
|
3376
|
-
* mpf_class::swap: C++ Interface Floats.
|
3377
3337
|
(line 104)
|
3378
|
-
*
|
3379
|
-
|
3380
|
-
*
|
3381
|
-
|
3382
|
-
*
|
3383
|
-
*
|
3384
|
-
*
|
3385
|
-
*
|
3386
|
-
*
|
3387
|
-
*
|
3388
|
-
*
|
3338
|
+
* mpf_class::set_str <1>: C++ Interface Floats.
|
3339
|
+
(line 105)
|
3340
|
+
* mpf_class::swap: C++ Interface Floats.
|
3341
|
+
(line 109)
|
3342
|
+
* mpf_clear: Initializing Floats. (line 36)
|
3343
|
+
* mpf_clears: Initializing Floats. (line 40)
|
3344
|
+
* mpf_cmp: Float Comparison. (line 6)
|
3345
|
+
* mpf_cmp_d: Float Comparison. (line 8)
|
3346
|
+
* mpf_cmp_si: Float Comparison. (line 10)
|
3347
|
+
* mpf_cmp_ui: Float Comparison. (line 9)
|
3348
|
+
* mpf_cmp_z: Float Comparison. (line 7)
|
3349
|
+
* mpf_div: Float Arithmetic. (line 28)
|
3350
|
+
* mpf_div_2exp: Float Arithmetic. (line 53)
|
3351
|
+
* mpf_div_ui: Float Arithmetic. (line 31)
|
3352
|
+
* mpf_eq: Float Comparison. (line 17)
|
3389
3353
|
* mpf_fits_sint_p: Miscellaneous Float Functions.
|
3390
|
-
(line
|
3354
|
+
(line 19)
|
3391
3355
|
* mpf_fits_slong_p: Miscellaneous Float Functions.
|
3392
|
-
(line
|
3356
|
+
(line 17)
|
3393
3357
|
* mpf_fits_sshort_p: Miscellaneous Float Functions.
|
3394
|
-
(line
|
3358
|
+
(line 21)
|
3395
3359
|
* mpf_fits_uint_p: Miscellaneous Float Functions.
|
3396
|
-
(line
|
3360
|
+
(line 18)
|
3397
3361
|
* mpf_fits_ulong_p: Miscellaneous Float Functions.
|
3398
|
-
(line
|
3362
|
+
(line 16)
|
3399
3363
|
* mpf_fits_ushort_p: Miscellaneous Float Functions.
|
3400
|
-
(line
|
3364
|
+
(line 20)
|
3401
3365
|
* mpf_floor: Miscellaneous Float Functions.
|
3402
|
-
(line
|
3403
|
-
* mpf_get_d: Converting Floats. (line
|
3404
|
-
*
|
3405
|
-
*
|
3406
|
-
* mpf_get_prec: Initializing Floats. (line
|
3407
|
-
* mpf_get_si: Converting Floats. (line
|
3408
|
-
* mpf_get_str: Converting Floats. (line
|
3409
|
-
* mpf_get_ui: Converting Floats. (line
|
3410
|
-
* mpf_init: Initializing Floats. (line
|
3411
|
-
* mpf_init2: Initializing Floats. (line
|
3366
|
+
(line 7)
|
3367
|
+
* mpf_get_d: Converting Floats. (line 6)
|
3368
|
+
* mpf_get_default_prec: Initializing Floats. (line 11)
|
3369
|
+
* mpf_get_d_2exp: Converting Floats. (line 15)
|
3370
|
+
* mpf_get_prec: Initializing Floats. (line 61)
|
3371
|
+
* mpf_get_si: Converting Floats. (line 27)
|
3372
|
+
* mpf_get_str: Converting Floats. (line 36)
|
3373
|
+
* mpf_get_ui: Converting Floats. (line 28)
|
3374
|
+
* mpf_init: Initializing Floats. (line 18)
|
3375
|
+
* mpf_init2: Initializing Floats. (line 25)
|
3376
|
+
* mpf_inits: Initializing Floats. (line 30)
|
3412
3377
|
* mpf_init_set: Simultaneous Float Init & Assign.
|
3413
|
-
(line
|
3378
|
+
(line 15)
|
3414
3379
|
* mpf_init_set_d: Simultaneous Float Init & Assign.
|
3415
|
-
(line 19)
|
3416
|
-
* mpf_init_set_si: Simultaneous Float Init & Assign.
|
3417
3380
|
(line 18)
|
3381
|
+
* mpf_init_set_si: Simultaneous Float Init & Assign.
|
3382
|
+
(line 17)
|
3418
3383
|
* mpf_init_set_str: Simultaneous Float Init & Assign.
|
3419
|
-
(line
|
3384
|
+
(line 24)
|
3420
3385
|
* mpf_init_set_ui: Simultaneous Float Init & Assign.
|
3421
|
-
(line
|
3422
|
-
*
|
3423
|
-
* mpf_inp_str: I/O of Floats. (line 39)
|
3386
|
+
(line 16)
|
3387
|
+
* mpf_inp_str: I/O of Floats. (line 38)
|
3424
3388
|
* mpf_integer_p: Miscellaneous Float Functions.
|
3425
|
-
(line
|
3426
|
-
* mpf_mul: Float Arithmetic. (line
|
3427
|
-
* mpf_mul_2exp: Float Arithmetic. (line
|
3428
|
-
* mpf_mul_ui: Float Arithmetic. (line
|
3429
|
-
* mpf_neg: Float Arithmetic. (line
|
3430
|
-
* mpf_out_str: I/O of Floats. (line
|
3431
|
-
* mpf_pow_ui: Float Arithmetic. (line
|
3389
|
+
(line 13)
|
3390
|
+
* mpf_mul: Float Arithmetic. (line 18)
|
3391
|
+
* mpf_mul_2exp: Float Arithmetic. (line 49)
|
3392
|
+
* mpf_mul_ui: Float Arithmetic. (line 19)
|
3393
|
+
* mpf_neg: Float Arithmetic. (line 43)
|
3394
|
+
* mpf_out_str: I/O of Floats. (line 17)
|
3395
|
+
* mpf_pow_ui: Float Arithmetic. (line 39)
|
3432
3396
|
* mpf_random2: Miscellaneous Float Functions.
|
3433
|
-
(line
|
3434
|
-
* mpf_reldiff: Float Comparison. (line
|
3435
|
-
* mpf_set: Assigning Floats. (line
|
3436
|
-
* mpf_set_d: Assigning Floats. (line
|
3437
|
-
* mpf_set_default_prec: Initializing Floats. (line
|
3438
|
-
* mpf_set_prec: Initializing Floats. (line
|
3439
|
-
* mpf_set_prec_raw: Initializing Floats. (line
|
3440
|
-
* mpf_set_q: Assigning Floats. (line
|
3441
|
-
* mpf_set_si: Assigning Floats. (line
|
3442
|
-
* mpf_set_str: Assigning Floats. (line
|
3443
|
-
* mpf_set_ui: Assigning Floats. (line
|
3444
|
-
* mpf_set_z: Assigning Floats. (line
|
3445
|
-
* mpf_sgn: Float Comparison. (line
|
3446
|
-
* mpf_sqrt: Float Arithmetic. (line
|
3447
|
-
* mpf_sqrt_ui: Float Arithmetic. (line
|
3448
|
-
* mpf_sub: Float Arithmetic. (line
|
3449
|
-
* mpf_sub_ui: Float Arithmetic. (line
|
3450
|
-
* mpf_swap: Assigning Floats. (line
|
3397
|
+
(line 35)
|
3398
|
+
* mpf_reldiff: Float Comparison. (line 28)
|
3399
|
+
* mpf_set: Assigning Floats. (line 9)
|
3400
|
+
* mpf_set_d: Assigning Floats. (line 12)
|
3401
|
+
* mpf_set_default_prec: Initializing Floats. (line 6)
|
3402
|
+
* mpf_set_prec: Initializing Floats. (line 64)
|
3403
|
+
* mpf_set_prec_raw: Initializing Floats. (line 71)
|
3404
|
+
* mpf_set_q: Assigning Floats. (line 14)
|
3405
|
+
* mpf_set_si: Assigning Floats. (line 11)
|
3406
|
+
* mpf_set_str: Assigning Floats. (line 17)
|
3407
|
+
* mpf_set_ui: Assigning Floats. (line 10)
|
3408
|
+
* mpf_set_z: Assigning Floats. (line 13)
|
3409
|
+
* mpf_sgn: Float Comparison. (line 33)
|
3410
|
+
* mpf_sqrt: Float Arithmetic. (line 35)
|
3411
|
+
* mpf_sqrt_ui: Float Arithmetic. (line 36)
|
3412
|
+
* mpf_sub: Float Arithmetic. (line 11)
|
3413
|
+
* mpf_sub_ui: Float Arithmetic. (line 14)
|
3414
|
+
* mpf_swap: Assigning Floats. (line 50)
|
3451
3415
|
* mpf_t: Nomenclature and Types.
|
3452
3416
|
(line 21)
|
3453
3417
|
* mpf_trunc: Miscellaneous Float Functions.
|
3454
|
-
(line
|
3455
|
-
* mpf_ui_div: Float Arithmetic. (line
|
3456
|
-
* mpf_ui_sub: Float Arithmetic. (line
|
3418
|
+
(line 8)
|
3419
|
+
* mpf_ui_div: Float Arithmetic. (line 29)
|
3420
|
+
* mpf_ui_sub: Float Arithmetic. (line 12)
|
3457
3421
|
* mpf_urandomb: Miscellaneous Float Functions.
|
3458
|
-
(line
|
3459
|
-
* mpn_add: Low-level Functions. (line
|
3460
|
-
*
|
3461
|
-
*
|
3462
|
-
*
|
3463
|
-
*
|
3464
|
-
*
|
3465
|
-
* mpn_cmp: Low-level Functions. (line
|
3466
|
-
* mpn_cnd_add_n: Low-level Functions. (line
|
3467
|
-
* mpn_cnd_sub_n: Low-level Functions. (line
|
3468
|
-
* mpn_cnd_swap: Low-level Functions. (line
|
3469
|
-
* mpn_com: Low-level Functions. (line
|
3470
|
-
* mpn_copyd: Low-level Functions. (line
|
3471
|
-
* mpn_copyi: Low-level Functions. (line
|
3472
|
-
* mpn_divexact_1: Low-level Functions. (line
|
3473
|
-
* mpn_divexact_by3: Low-level Functions. (line
|
3474
|
-
* mpn_divexact_by3c: Low-level Functions. (line
|
3475
|
-
* mpn_divmod: Low-level Functions. (line
|
3476
|
-
* mpn_divmod_1: Low-level Functions. (line
|
3477
|
-
* mpn_divrem: Low-level Functions. (line
|
3478
|
-
* mpn_divrem_1: Low-level Functions. (line
|
3479
|
-
* mpn_gcd: Low-level Functions. (line
|
3480
|
-
*
|
3481
|
-
*
|
3482
|
-
* mpn_get_str: Low-level Functions. (line
|
3483
|
-
* mpn_hamdist: Low-level Functions. (line
|
3484
|
-
*
|
3485
|
-
*
|
3486
|
-
* mpn_lshift: Low-level Functions. (line
|
3487
|
-
* mpn_mod_1: Low-level Functions. (line
|
3488
|
-
* mpn_mul: Low-level Functions. (line
|
3489
|
-
* mpn_mul_1: Low-level Functions. (line
|
3490
|
-
* mpn_mul_n: Low-level Functions. (line
|
3491
|
-
* mpn_nand_n: Low-level Functions. (line
|
3492
|
-
* mpn_neg: Low-level Functions. (line
|
3493
|
-
* mpn_nior_n: Low-level Functions. (line
|
3494
|
-
* mpn_perfect_square_p: Low-level Functions. (line
|
3495
|
-
* mpn_popcount: Low-level Functions. (line
|
3496
|
-
* mpn_random: Low-level Functions. (line
|
3497
|
-
* mpn_random2: Low-level Functions. (line
|
3498
|
-
* mpn_rshift: Low-level Functions. (line
|
3499
|
-
* mpn_scan0: Low-level Functions. (line
|
3500
|
-
* mpn_scan1: Low-level Functions. (line
|
3501
|
-
* mpn_sec_add_1: Low-level Functions. (line
|
3502
|
-
* mpn_sec_div_qr: Low-level Functions. (line
|
3503
|
-
* mpn_sec_div_qr_itch: Low-level Functions. (line
|
3504
|
-
* mpn_sec_div_r: Low-level Functions. (line
|
3422
|
+
(line 25)
|
3423
|
+
* mpn_add: Low-level Functions. (line 67)
|
3424
|
+
* mpn_addmul_1: Low-level Functions. (line 148)
|
3425
|
+
* mpn_add_1: Low-level Functions. (line 62)
|
3426
|
+
* mpn_add_n: Low-level Functions. (line 52)
|
3427
|
+
* mpn_andn_n: Low-level Functions. (line 462)
|
3428
|
+
* mpn_and_n: Low-level Functions. (line 447)
|
3429
|
+
* mpn_cmp: Low-level Functions. (line 293)
|
3430
|
+
* mpn_cnd_add_n: Low-level Functions. (line 540)
|
3431
|
+
* mpn_cnd_sub_n: Low-level Functions. (line 542)
|
3432
|
+
* mpn_cnd_swap: Low-level Functions. (line 567)
|
3433
|
+
* mpn_com: Low-level Functions. (line 487)
|
3434
|
+
* mpn_copyd: Low-level Functions. (line 496)
|
3435
|
+
* mpn_copyi: Low-level Functions. (line 492)
|
3436
|
+
* mpn_divexact_1: Low-level Functions. (line 231)
|
3437
|
+
* mpn_divexact_by3: Low-level Functions. (line 238)
|
3438
|
+
* mpn_divexact_by3c: Low-level Functions. (line 240)
|
3439
|
+
* mpn_divmod: Low-level Functions. (line 226)
|
3440
|
+
* mpn_divmod_1: Low-level Functions. (line 210)
|
3441
|
+
* mpn_divrem: Low-level Functions. (line 183)
|
3442
|
+
* mpn_divrem_1: Low-level Functions. (line 208)
|
3443
|
+
* mpn_gcd: Low-level Functions. (line 301)
|
3444
|
+
* mpn_gcdext: Low-level Functions. (line 316)
|
3445
|
+
* mpn_gcd_1: Low-level Functions. (line 311)
|
3446
|
+
* mpn_get_str: Low-level Functions. (line 371)
|
3447
|
+
* mpn_hamdist: Low-level Functions. (line 436)
|
3448
|
+
* mpn_iorn_n: Low-level Functions. (line 467)
|
3449
|
+
* mpn_ior_n: Low-level Functions. (line 452)
|
3450
|
+
* mpn_lshift: Low-level Functions. (line 269)
|
3451
|
+
* mpn_mod_1: Low-level Functions. (line 264)
|
3452
|
+
* mpn_mul: Low-level Functions. (line 114)
|
3453
|
+
* mpn_mul_1: Low-level Functions. (line 133)
|
3454
|
+
* mpn_mul_n: Low-level Functions. (line 103)
|
3455
|
+
* mpn_nand_n: Low-level Functions. (line 472)
|
3456
|
+
* mpn_neg: Low-level Functions. (line 96)
|
3457
|
+
* mpn_nior_n: Low-level Functions. (line 477)
|
3458
|
+
* mpn_perfect_square_p: Low-level Functions. (line 442)
|
3459
|
+
* mpn_popcount: Low-level Functions. (line 432)
|
3460
|
+
* mpn_random: Low-level Functions. (line 422)
|
3461
|
+
* mpn_random2: Low-level Functions. (line 423)
|
3462
|
+
* mpn_rshift: Low-level Functions. (line 281)
|
3463
|
+
* mpn_scan0: Low-level Functions. (line 406)
|
3464
|
+
* mpn_scan1: Low-level Functions. (line 414)
|
3465
|
+
* mpn_sec_add_1: Low-level Functions. (line 553)
|
3466
|
+
* mpn_sec_div_qr: Low-level Functions. (line 629)
|
3467
|
+
* mpn_sec_div_qr_itch: Low-level Functions. (line 632)
|
3468
|
+
* mpn_sec_div_r: Low-level Functions. (line 648)
|
3505
3469
|
* mpn_sec_div_r_itch: Low-level Functions. (line 650)
|
3506
3470
|
* mpn_sec_invert: Low-level Functions. (line 664)
|
3507
|
-
* mpn_sec_invert_itch: Low-level Functions. (line
|
3508
|
-
* mpn_sec_mul: Low-level Functions. (line
|
3509
|
-
* mpn_sec_mul_itch: Low-level Functions. (line
|
3510
|
-
* mpn_sec_powm: Low-level Functions. (line
|
3511
|
-
* mpn_sec_powm_itch: Low-level Functions. (line
|
3512
|
-
* mpn_sec_sqr: Low-level Functions. (line
|
3513
|
-
* mpn_sec_sqr_itch: Low-level Functions. (line
|
3514
|
-
* mpn_sec_sub_1: Low-level Functions. (line
|
3515
|
-
* mpn_sec_tabselect: Low-level Functions. (line
|
3516
|
-
* mpn_set_str: Low-level Functions. (line
|
3517
|
-
* mpn_sizeinbase: Low-level Functions. (line
|
3518
|
-
* mpn_sqr: Low-level Functions. (line
|
3519
|
-
* mpn_sqrtrem: Low-level Functions. (line
|
3520
|
-
* mpn_sub: Low-level Functions. (line
|
3521
|
-
*
|
3522
|
-
*
|
3523
|
-
*
|
3524
|
-
* mpn_tdiv_qr: Low-level Functions. (line
|
3525
|
-
* mpn_xnor_n: Low-level Functions. (line
|
3526
|
-
* mpn_xor_n: Low-level Functions. (line
|
3527
|
-
* mpn_zero: Low-level Functions. (line
|
3528
|
-
* mpn_zero_p: Low-level Functions. (line
|
3529
|
-
* mpq_abs: Rational Arithmetic. (line
|
3530
|
-
* mpq_add: Rational Arithmetic. (line
|
3471
|
+
* mpn_sec_invert_itch: Low-level Functions. (line 666)
|
3472
|
+
* mpn_sec_mul: Low-level Functions. (line 574)
|
3473
|
+
* mpn_sec_mul_itch: Low-level Functions. (line 577)
|
3474
|
+
* mpn_sec_powm: Low-level Functions. (line 604)
|
3475
|
+
* mpn_sec_powm_itch: Low-level Functions. (line 607)
|
3476
|
+
* mpn_sec_sqr: Low-level Functions. (line 590)
|
3477
|
+
* mpn_sec_sqr_itch: Low-level Functions. (line 592)
|
3478
|
+
* mpn_sec_sub_1: Low-level Functions. (line 555)
|
3479
|
+
* mpn_sec_tabselect: Low-level Functions. (line 621)
|
3480
|
+
* mpn_set_str: Low-level Functions. (line 386)
|
3481
|
+
* mpn_sizeinbase: Low-level Functions. (line 364)
|
3482
|
+
* mpn_sqr: Low-level Functions. (line 125)
|
3483
|
+
* mpn_sqrtrem: Low-level Functions. (line 346)
|
3484
|
+
* mpn_sub: Low-level Functions. (line 88)
|
3485
|
+
* mpn_submul_1: Low-level Functions. (line 160)
|
3486
|
+
* mpn_sub_1: Low-level Functions. (line 83)
|
3487
|
+
* mpn_sub_n: Low-level Functions. (line 74)
|
3488
|
+
* mpn_tdiv_qr: Low-level Functions. (line 172)
|
3489
|
+
* mpn_xnor_n: Low-level Functions. (line 482)
|
3490
|
+
* mpn_xor_n: Low-level Functions. (line 457)
|
3491
|
+
* mpn_zero: Low-level Functions. (line 500)
|
3492
|
+
* mpn_zero_p: Low-level Functions. (line 298)
|
3493
|
+
* mpq_abs: Rational Arithmetic. (line 33)
|
3494
|
+
* mpq_add: Rational Arithmetic. (line 6)
|
3531
3495
|
* mpq_canonicalize: Rational Number Functions.
|
3532
|
-
(line
|
3496
|
+
(line 21)
|
3533
3497
|
* mpq_class: C++ Interface General.
|
3534
|
-
(line
|
3498
|
+
(line 18)
|
3535
3499
|
* mpq_class::canonicalize: C++ Interface Rationals.
|
3536
|
-
(line
|
3500
|
+
(line 41)
|
3537
3501
|
* mpq_class::get_d: C++ Interface Rationals.
|
3538
|
-
(line
|
3502
|
+
(line 51)
|
3539
3503
|
* mpq_class::get_den: C++ Interface Rationals.
|
3540
|
-
(line
|
3504
|
+
(line 67)
|
3541
3505
|
* mpq_class::get_den_mpz_t: C++ Interface Rationals.
|
3542
|
-
(line
|
3506
|
+
(line 77)
|
3543
3507
|
* mpq_class::get_mpq_t: C++ Interface General.
|
3544
|
-
(line
|
3508
|
+
(line 64)
|
3545
3509
|
* mpq_class::get_num: C++ Interface Rationals.
|
3546
|
-
(line
|
3510
|
+
(line 66)
|
3547
3511
|
* mpq_class::get_num_mpz_t: C++ Interface Rationals.
|
3548
|
-
(line
|
3512
|
+
(line 76)
|
3549
3513
|
* mpq_class::get_str: C++ Interface Rationals.
|
3550
|
-
(line
|
3514
|
+
(line 52)
|
3551
3515
|
* mpq_class::mpq_class: C++ Interface Rationals.
|
3552
|
-
(line
|
3516
|
+
(line 9)
|
3517
|
+
* mpq_class::mpq_class <1>: C++ Interface Rationals.
|
3518
|
+
(line 10)
|
3519
|
+
* mpq_class::mpq_class <2>: C++ Interface Rationals.
|
3520
|
+
(line 21)
|
3521
|
+
* mpq_class::mpq_class <3>: C++ Interface Rationals.
|
3522
|
+
(line 26)
|
3523
|
+
* mpq_class::mpq_class <4>: C++ Interface Rationals.
|
3524
|
+
(line 28)
|
3553
3525
|
* mpq_class::set_str: C++ Interface Rationals.
|
3526
|
+
(line 54)
|
3527
|
+
* mpq_class::set_str <1>: C++ Interface Rationals.
|
3554
3528
|
(line 55)
|
3555
3529
|
* mpq_class::swap: C++ Interface Rationals.
|
3556
|
-
(line
|
3530
|
+
(line 58)
|
3557
3531
|
* mpq_clear: Initializing Rationals.
|
3558
|
-
(line
|
3532
|
+
(line 15)
|
3559
3533
|
* mpq_clears: Initializing Rationals.
|
3560
|
-
(line
|
3561
|
-
* mpq_cmp: Comparing Rationals. (line
|
3562
|
-
* mpq_cmp_si: Comparing Rationals. (line
|
3563
|
-
* mpq_cmp_ui: Comparing Rationals. (line
|
3564
|
-
* mpq_cmp_z: Comparing Rationals. (line
|
3534
|
+
(line 19)
|
3535
|
+
* mpq_cmp: Comparing Rationals. (line 6)
|
3536
|
+
* mpq_cmp_si: Comparing Rationals. (line 16)
|
3537
|
+
* mpq_cmp_ui: Comparing Rationals. (line 14)
|
3538
|
+
* mpq_cmp_z: Comparing Rationals. (line 7)
|
3565
3539
|
* mpq_denref: Applying Integer Functions.
|
3566
|
-
(line
|
3567
|
-
* mpq_div: Rational Arithmetic. (line
|
3568
|
-
* mpq_div_2exp: Rational Arithmetic. (line
|
3569
|
-
* mpq_equal: Comparing Rationals. (line
|
3540
|
+
(line 16)
|
3541
|
+
* mpq_div: Rational Arithmetic. (line 22)
|
3542
|
+
* mpq_div_2exp: Rational Arithmetic. (line 26)
|
3543
|
+
* mpq_equal: Comparing Rationals. (line 33)
|
3570
3544
|
* mpq_get_d: Rational Conversions.
|
3571
|
-
(line
|
3545
|
+
(line 6)
|
3572
3546
|
* mpq_get_den: Applying Integer Functions.
|
3573
|
-
(line
|
3547
|
+
(line 22)
|
3574
3548
|
* mpq_get_num: Applying Integer Functions.
|
3575
|
-
(line
|
3549
|
+
(line 21)
|
3576
3550
|
* mpq_get_str: Rational Conversions.
|
3577
|
-
(line
|
3551
|
+
(line 21)
|
3578
3552
|
* mpq_init: Initializing Rationals.
|
3579
|
-
(line
|
3553
|
+
(line 6)
|
3580
3554
|
* mpq_inits: Initializing Rationals.
|
3581
|
-
(line
|
3582
|
-
* mpq_inp_str: I/O of Rationals. (line
|
3583
|
-
* mpq_inv: Rational Arithmetic. (line
|
3584
|
-
* mpq_mul: Rational Arithmetic. (line
|
3585
|
-
* mpq_mul_2exp: Rational Arithmetic. (line
|
3586
|
-
* mpq_neg: Rational Arithmetic. (line
|
3555
|
+
(line 11)
|
3556
|
+
* mpq_inp_str: I/O of Rationals. (line 26)
|
3557
|
+
* mpq_inv: Rational Arithmetic. (line 36)
|
3558
|
+
* mpq_mul: Rational Arithmetic. (line 14)
|
3559
|
+
* mpq_mul_2exp: Rational Arithmetic. (line 18)
|
3560
|
+
* mpq_neg: Rational Arithmetic. (line 30)
|
3587
3561
|
* mpq_numref: Applying Integer Functions.
|
3588
|
-
(line
|
3589
|
-
* mpq_out_str: I/O of Rationals. (line
|
3562
|
+
(line 15)
|
3563
|
+
* mpq_out_str: I/O of Rationals. (line 17)
|
3590
3564
|
* mpq_set: Initializing Rationals.
|
3591
|
-
(line
|
3565
|
+
(line 23)
|
3592
3566
|
* mpq_set_d: Rational Conversions.
|
3593
|
-
(line
|
3567
|
+
(line 16)
|
3594
3568
|
* mpq_set_den: Applying Integer Functions.
|
3595
|
-
(line
|
3569
|
+
(line 24)
|
3596
3570
|
* mpq_set_f: Rational Conversions.
|
3597
|
-
(line
|
3571
|
+
(line 17)
|
3598
3572
|
* mpq_set_num: Applying Integer Functions.
|
3599
|
-
(line
|
3573
|
+
(line 23)
|
3600
3574
|
* mpq_set_si: Initializing Rationals.
|
3601
|
-
(line
|
3575
|
+
(line 29)
|
3602
3576
|
* mpq_set_str: Initializing Rationals.
|
3603
|
-
(line
|
3577
|
+
(line 35)
|
3604
3578
|
* mpq_set_ui: Initializing Rationals.
|
3605
|
-
(line
|
3579
|
+
(line 27)
|
3606
3580
|
* mpq_set_z: Initializing Rationals.
|
3607
|
-
(line
|
3608
|
-
* mpq_sgn: Comparing Rationals. (line
|
3609
|
-
* mpq_sub: Rational Arithmetic. (line
|
3581
|
+
(line 24)
|
3582
|
+
* mpq_sgn: Comparing Rationals. (line 27)
|
3583
|
+
* mpq_sub: Rational Arithmetic. (line 10)
|
3610
3584
|
* mpq_swap: Initializing Rationals.
|
3611
|
-
(line
|
3585
|
+
(line 54)
|
3612
3586
|
* mpq_t: Nomenclature and Types.
|
3613
3587
|
(line 16)
|
3614
3588
|
* mpz_2fac_ui: Number Theoretic Functions.
|
3615
|
-
(line
|
3616
|
-
* mpz_abs: Integer Arithmetic. (line
|
3617
|
-
* mpz_add: Integer Arithmetic. (line
|
3618
|
-
*
|
3619
|
-
*
|
3620
|
-
*
|
3589
|
+
(line 109)
|
3590
|
+
* mpz_abs: Integer Arithmetic. (line 44)
|
3591
|
+
* mpz_add: Integer Arithmetic. (line 6)
|
3592
|
+
* mpz_addmul: Integer Arithmetic. (line 24)
|
3593
|
+
* mpz_addmul_ui: Integer Arithmetic. (line 26)
|
3594
|
+
* mpz_add_ui: Integer Arithmetic. (line 7)
|
3621
3595
|
* mpz_and: Integer Logic and Bit Fiddling.
|
3622
|
-
(line
|
3596
|
+
(line 10)
|
3623
3597
|
* mpz_array_init: Integer Special Functions.
|
3624
|
-
(line
|
3598
|
+
(line 9)
|
3625
3599
|
* mpz_bin_ui: Number Theoretic Functions.
|
3626
|
-
(line
|
3600
|
+
(line 120)
|
3627
3601
|
* mpz_bin_uiui: Number Theoretic Functions.
|
3628
|
-
(line
|
3629
|
-
* mpz_cdiv_q: Integer Division. (line
|
3602
|
+
(line 122)
|
3603
|
+
* mpz_cdiv_q: Integer Division. (line 12)
|
3604
|
+
* mpz_cdiv_qr: Integer Division. (line 14)
|
3605
|
+
* mpz_cdiv_qr_ui: Integer Division. (line 21)
|
3630
3606
|
* mpz_cdiv_q_2exp: Integer Division. (line 26)
|
3631
|
-
* mpz_cdiv_q_ui: Integer Division. (line
|
3632
|
-
*
|
3633
|
-
*
|
3634
|
-
*
|
3635
|
-
*
|
3636
|
-
* mpz_cdiv_r_ui: Integer Division. (line 20)
|
3637
|
-
* mpz_cdiv_ui: Integer Division. (line 24)
|
3607
|
+
* mpz_cdiv_q_ui: Integer Division. (line 17)
|
3608
|
+
* mpz_cdiv_r: Integer Division. (line 13)
|
3609
|
+
* mpz_cdiv_r_2exp: Integer Division. (line 29)
|
3610
|
+
* mpz_cdiv_r_ui: Integer Division. (line 19)
|
3611
|
+
* mpz_cdiv_ui: Integer Division. (line 23)
|
3638
3612
|
* mpz_class: C++ Interface General.
|
3639
|
-
(line
|
3613
|
+
(line 17)
|
3640
3614
|
* mpz_class::fits_sint_p: C++ Interface Integers.
|
3641
3615
|
(line 50)
|
3642
3616
|
* mpz_class::fits_slong_p: C++ Interface Integers.
|
@@ -3644,279 +3618,303 @@ Function and Type Index
|
|
3644
3618
|
* mpz_class::fits_sshort_p: C++ Interface Integers.
|
3645
3619
|
(line 52)
|
3646
3620
|
* mpz_class::fits_uint_p: C++ Interface Integers.
|
3647
|
-
(line 53)
|
3648
|
-
* mpz_class::fits_ulong_p: C++ Interface Integers.
|
3649
3621
|
(line 54)
|
3650
|
-
* mpz_class::
|
3622
|
+
* mpz_class::fits_ulong_p: C++ Interface Integers.
|
3651
3623
|
(line 55)
|
3652
|
-
* mpz_class::
|
3624
|
+
* mpz_class::fits_ushort_p: C++ Interface Integers.
|
3653
3625
|
(line 56)
|
3626
|
+
* mpz_class::get_d: C++ Interface Integers.
|
3627
|
+
(line 58)
|
3654
3628
|
* mpz_class::get_mpz_t: C++ Interface General.
|
3655
|
-
(line
|
3629
|
+
(line 63)
|
3656
3630
|
* mpz_class::get_si: C++ Interface Integers.
|
3657
|
-
(line
|
3631
|
+
(line 59)
|
3658
3632
|
* mpz_class::get_str: C++ Interface Integers.
|
3659
|
-
(line
|
3633
|
+
(line 60)
|
3660
3634
|
* mpz_class::get_ui: C++ Interface Integers.
|
3661
|
-
(line
|
3635
|
+
(line 61)
|
3662
3636
|
* mpz_class::mpz_class: C++ Interface Integers.
|
3663
|
-
(line
|
3637
|
+
(line 6)
|
3638
|
+
* mpz_class::mpz_class <1>: C++ Interface Integers.
|
3639
|
+
(line 14)
|
3640
|
+
* mpz_class::mpz_class <2>: C++ Interface Integers.
|
3641
|
+
(line 19)
|
3642
|
+
* mpz_class::mpz_class <3>: C++ Interface Integers.
|
3643
|
+
(line 21)
|
3664
3644
|
* mpz_class::set_str: C++ Interface Integers.
|
3665
|
-
(line
|
3645
|
+
(line 63)
|
3646
|
+
* mpz_class::set_str <1>: C++ Interface Integers.
|
3647
|
+
(line 64)
|
3666
3648
|
* mpz_class::swap: C++ Interface Integers.
|
3667
|
-
(line
|
3649
|
+
(line 71)
|
3668
3650
|
* mpz_clear: Initializing Integers.
|
3669
|
-
(line
|
3651
|
+
(line 48)
|
3670
3652
|
* mpz_clears: Initializing Integers.
|
3671
|
-
(line
|
3653
|
+
(line 52)
|
3672
3654
|
* mpz_clrbit: Integer Logic and Bit Fiddling.
|
3673
|
-
(line
|
3674
|
-
* mpz_cmp: Integer Comparisons. (line
|
3675
|
-
*
|
3676
|
-
*
|
3677
|
-
*
|
3678
|
-
*
|
3679
|
-
*
|
3680
|
-
*
|
3655
|
+
(line 54)
|
3656
|
+
* mpz_cmp: Integer Comparisons. (line 6)
|
3657
|
+
* mpz_cmpabs: Integer Comparisons. (line 17)
|
3658
|
+
* mpz_cmpabs_d: Integer Comparisons. (line 18)
|
3659
|
+
* mpz_cmpabs_ui: Integer Comparisons. (line 19)
|
3660
|
+
* mpz_cmp_d: Integer Comparisons. (line 7)
|
3661
|
+
* mpz_cmp_si: Integer Comparisons. (line 8)
|
3662
|
+
* mpz_cmp_ui: Integer Comparisons. (line 9)
|
3681
3663
|
* mpz_com: Integer Logic and Bit Fiddling.
|
3682
|
-
(line
|
3664
|
+
(line 19)
|
3683
3665
|
* mpz_combit: Integer Logic and Bit Fiddling.
|
3684
|
-
(line
|
3685
|
-
* mpz_congruent_2exp_p: Integer Division. (line
|
3686
|
-
* mpz_congruent_p: Integer Division. (line
|
3687
|
-
* mpz_congruent_ui_p: Integer Division. (line
|
3688
|
-
* mpz_divexact: Integer Division. (line
|
3689
|
-
* mpz_divexact_ui: Integer Division. (line
|
3690
|
-
* mpz_divisible_2exp_p: Integer Division. (line
|
3691
|
-
* mpz_divisible_p: Integer Division. (line
|
3692
|
-
* mpz_divisible_ui_p: Integer Division. (line
|
3666
|
+
(line 57)
|
3667
|
+
* mpz_congruent_2exp_p: Integer Division. (line 148)
|
3668
|
+
* mpz_congruent_p: Integer Division. (line 144)
|
3669
|
+
* mpz_congruent_ui_p: Integer Division. (line 146)
|
3670
|
+
* mpz_divexact: Integer Division. (line 122)
|
3671
|
+
* mpz_divexact_ui: Integer Division. (line 123)
|
3672
|
+
* mpz_divisible_2exp_p: Integer Division. (line 135)
|
3673
|
+
* mpz_divisible_p: Integer Division. (line 132)
|
3674
|
+
* mpz_divisible_ui_p: Integer Division. (line 133)
|
3693
3675
|
* mpz_even_p: Miscellaneous Integer Functions.
|
3694
|
-
(line
|
3676
|
+
(line 17)
|
3695
3677
|
* mpz_export: Integer Import and Export.
|
3696
|
-
(line
|
3678
|
+
(line 43)
|
3697
3679
|
* mpz_fac_ui: Number Theoretic Functions.
|
3698
|
-
(line
|
3699
|
-
* mpz_fdiv_q: Integer Division. (line
|
3700
|
-
*
|
3701
|
-
*
|
3702
|
-
*
|
3703
|
-
*
|
3704
|
-
* mpz_fdiv_r: Integer Division. (line
|
3705
|
-
* mpz_fdiv_r_2exp: Integer Division. (line
|
3706
|
-
* mpz_fdiv_r_ui: Integer Division. (line
|
3707
|
-
* mpz_fdiv_ui: Integer Division. (line
|
3680
|
+
(line 108)
|
3681
|
+
* mpz_fdiv_q: Integer Division. (line 33)
|
3682
|
+
* mpz_fdiv_qr: Integer Division. (line 35)
|
3683
|
+
* mpz_fdiv_qr_ui: Integer Division. (line 42)
|
3684
|
+
* mpz_fdiv_q_2exp: Integer Division. (line 47)
|
3685
|
+
* mpz_fdiv_q_ui: Integer Division. (line 38)
|
3686
|
+
* mpz_fdiv_r: Integer Division. (line 34)
|
3687
|
+
* mpz_fdiv_r_2exp: Integer Division. (line 50)
|
3688
|
+
* mpz_fdiv_r_ui: Integer Division. (line 40)
|
3689
|
+
* mpz_fdiv_ui: Integer Division. (line 44)
|
3708
3690
|
* mpz_fib2_ui: Number Theoretic Functions.
|
3709
|
-
(line 132)
|
3710
|
-
* mpz_fib_ui: Number Theoretic Functions.
|
3711
3691
|
(line 130)
|
3692
|
+
* mpz_fib_ui: Number Theoretic Functions.
|
3693
|
+
(line 129)
|
3712
3694
|
* mpz_fits_sint_p: Miscellaneous Integer Functions.
|
3713
|
-
(line
|
3695
|
+
(line 9)
|
3714
3696
|
* mpz_fits_slong_p: Miscellaneous Integer Functions.
|
3715
|
-
(line
|
3697
|
+
(line 7)
|
3716
3698
|
* mpz_fits_sshort_p: Miscellaneous Integer Functions.
|
3717
|
-
(line
|
3699
|
+
(line 11)
|
3718
3700
|
* mpz_fits_uint_p: Miscellaneous Integer Functions.
|
3719
|
-
(line
|
3701
|
+
(line 8)
|
3720
3702
|
* mpz_fits_ulong_p: Miscellaneous Integer Functions.
|
3721
|
-
(line
|
3703
|
+
(line 6)
|
3722
3704
|
* mpz_fits_ushort_p: Miscellaneous Integer Functions.
|
3723
|
-
(line
|
3705
|
+
(line 10)
|
3724
3706
|
* mpz_gcd: Number Theoretic Functions.
|
3725
|
-
(line
|
3726
|
-
* mpz_gcd_ui: Number Theoretic Functions.
|
3727
|
-
(line 33)
|
3707
|
+
(line 25)
|
3728
3708
|
* mpz_gcdext: Number Theoretic Functions.
|
3729
|
-
(line
|
3730
|
-
*
|
3731
|
-
|
3732
|
-
* mpz_get_si: Converting Integers. (line 18)
|
3733
|
-
* mpz_get_str: Converting Integers. (line 47)
|
3734
|
-
* mpz_get_ui: Converting Integers. (line 11)
|
3709
|
+
(line 41)
|
3710
|
+
* mpz_gcd_ui: Number Theoretic Functions.
|
3711
|
+
(line 31)
|
3735
3712
|
* mpz_getlimbn: Integer Special Functions.
|
3736
|
-
(line
|
3713
|
+
(line 22)
|
3714
|
+
* mpz_get_d: Converting Integers. (line 26)
|
3715
|
+
* mpz_get_d_2exp: Converting Integers. (line 34)
|
3716
|
+
* mpz_get_si: Converting Integers. (line 17)
|
3717
|
+
* mpz_get_str: Converting Integers. (line 46)
|
3718
|
+
* mpz_get_ui: Converting Integers. (line 10)
|
3737
3719
|
* mpz_hamdist: Integer Logic and Bit Fiddling.
|
3738
|
-
(line
|
3720
|
+
(line 28)
|
3739
3721
|
* mpz_import: Integer Import and Export.
|
3740
|
-
(line
|
3722
|
+
(line 9)
|
3741
3723
|
* mpz_init: Initializing Integers.
|
3742
|
-
(line
|
3724
|
+
(line 25)
|
3743
3725
|
* mpz_init2: Initializing Integers.
|
3744
|
-
(line
|
3726
|
+
(line 32)
|
3727
|
+
* mpz_inits: Initializing Integers.
|
3728
|
+
(line 28)
|
3745
3729
|
* mpz_init_set: Simultaneous Integer Init & Assign.
|
3746
|
-
(line
|
3730
|
+
(line 26)
|
3747
3731
|
* mpz_init_set_d: Simultaneous Integer Init & Assign.
|
3748
|
-
(line 30)
|
3749
|
-
* mpz_init_set_si: Simultaneous Integer Init & Assign.
|
3750
3732
|
(line 29)
|
3733
|
+
* mpz_init_set_si: Simultaneous Integer Init & Assign.
|
3734
|
+
(line 28)
|
3751
3735
|
* mpz_init_set_str: Simultaneous Integer Init & Assign.
|
3752
|
-
(line
|
3736
|
+
(line 33)
|
3753
3737
|
* mpz_init_set_ui: Simultaneous Integer Init & Assign.
|
3754
|
-
(line
|
3755
|
-
*
|
3756
|
-
|
3757
|
-
* mpz_inp_raw: I/O of Integers. (line 62)
|
3758
|
-
* mpz_inp_str: I/O of Integers. (line 31)
|
3738
|
+
(line 27)
|
3739
|
+
* mpz_inp_raw: I/O of Integers. (line 61)
|
3740
|
+
* mpz_inp_str: I/O of Integers. (line 30)
|
3759
3741
|
* mpz_invert: Number Theoretic Functions.
|
3760
|
-
(line
|
3742
|
+
(line 68)
|
3761
3743
|
* mpz_ior: Integer Logic and Bit Fiddling.
|
3762
|
-
(line
|
3744
|
+
(line 13)
|
3763
3745
|
* mpz_jacobi: Number Theoretic Functions.
|
3764
|
-
(line
|
3746
|
+
(line 78)
|
3765
3747
|
* mpz_kronecker: Number Theoretic Functions.
|
3766
|
-
(line
|
3748
|
+
(line 86)
|
3767
3749
|
* mpz_kronecker_si: Number Theoretic Functions.
|
3768
|
-
(line
|
3750
|
+
(line 87)
|
3769
3751
|
* mpz_kronecker_ui: Number Theoretic Functions.
|
3770
|
-
(line
|
3752
|
+
(line 88)
|
3771
3753
|
* mpz_lcm: Number Theoretic Functions.
|
3772
|
-
(line
|
3754
|
+
(line 61)
|
3773
3755
|
* mpz_lcm_ui: Number Theoretic Functions.
|
3774
|
-
(line
|
3756
|
+
(line 62)
|
3775
3757
|
* mpz_legendre: Number Theoretic Functions.
|
3776
|
-
(line
|
3758
|
+
(line 81)
|
3777
3759
|
* mpz_limbs_finish: Integer Special Functions.
|
3778
|
-
(line
|
3760
|
+
(line 47)
|
3779
3761
|
* mpz_limbs_modify: Integer Special Functions.
|
3780
|
-
(line
|
3762
|
+
(line 40)
|
3781
3763
|
* mpz_limbs_read: Integer Special Functions.
|
3782
|
-
(line
|
3764
|
+
(line 34)
|
3783
3765
|
* mpz_limbs_write: Integer Special Functions.
|
3784
|
-
(line
|
3766
|
+
(line 39)
|
3785
3767
|
* mpz_lucnum2_ui: Number Theoretic Functions.
|
3786
|
-
(line 143)
|
3787
|
-
* mpz_lucnum_ui: Number Theoretic Functions.
|
3788
3768
|
(line 141)
|
3769
|
+
* mpz_lucnum_ui: Number Theoretic Functions.
|
3770
|
+
(line 140)
|
3789
3771
|
* mpz_mfac_uiui: Number Theoretic Functions.
|
3790
|
-
(line
|
3791
|
-
* mpz_mod: Integer Division. (line
|
3792
|
-
* mpz_mod_ui: Integer Division. (line
|
3793
|
-
* mpz_mul: Integer Arithmetic. (line
|
3794
|
-
* mpz_mul_2exp: Integer Arithmetic. (line
|
3795
|
-
* mpz_mul_si: Integer Arithmetic. (line
|
3796
|
-
* mpz_mul_ui: Integer Arithmetic. (line
|
3797
|
-
* mpz_neg: Integer Arithmetic. (line
|
3772
|
+
(line 110)
|
3773
|
+
* mpz_mod: Integer Division. (line 112)
|
3774
|
+
* mpz_mod_ui: Integer Division. (line 113)
|
3775
|
+
* mpz_mul: Integer Arithmetic. (line 18)
|
3776
|
+
* mpz_mul_2exp: Integer Arithmetic. (line 36)
|
3777
|
+
* mpz_mul_si: Integer Arithmetic. (line 19)
|
3778
|
+
* mpz_mul_ui: Integer Arithmetic. (line 20)
|
3779
|
+
* mpz_neg: Integer Arithmetic. (line 41)
|
3798
3780
|
* mpz_nextprime: Number Theoretic Functions.
|
3799
|
-
(line
|
3781
|
+
(line 18)
|
3800
3782
|
* mpz_odd_p: Miscellaneous Integer Functions.
|
3801
|
-
(line
|
3802
|
-
* mpz_out_raw: I/O of Integers. (line
|
3803
|
-
* mpz_out_str: I/O of Integers. (line
|
3804
|
-
* mpz_perfect_power_p: Integer Roots. (line
|
3805
|
-
* mpz_perfect_square_p: Integer Roots. (line
|
3783
|
+
(line 16)
|
3784
|
+
* mpz_out_raw: I/O of Integers. (line 45)
|
3785
|
+
* mpz_out_str: I/O of Integers. (line 17)
|
3786
|
+
* mpz_perfect_power_p: Integer Roots. (line 27)
|
3787
|
+
* mpz_perfect_square_p: Integer Roots. (line 36)
|
3806
3788
|
* mpz_popcount: Integer Logic and Bit Fiddling.
|
3807
|
-
(line
|
3808
|
-
* mpz_pow_ui: Integer Exponentiation.
|
3809
|
-
(line 31)
|
3789
|
+
(line 22)
|
3810
3790
|
* mpz_powm: Integer Exponentiation.
|
3811
|
-
(line
|
3791
|
+
(line 6)
|
3812
3792
|
* mpz_powm_sec: Integer Exponentiation.
|
3813
|
-
(line
|
3793
|
+
(line 16)
|
3814
3794
|
* mpz_powm_ui: Integer Exponentiation.
|
3815
|
-
(line
|
3795
|
+
(line 8)
|
3796
|
+
* mpz_pow_ui: Integer Exponentiation.
|
3797
|
+
(line 29)
|
3816
3798
|
* mpz_primorial_ui: Number Theoretic Functions.
|
3817
|
-
(line
|
3799
|
+
(line 116)
|
3818
3800
|
* mpz_probab_prime_p: Number Theoretic Functions.
|
3819
|
-
(line
|
3801
|
+
(line 6)
|
3820
3802
|
* mpz_random: Integer Random Numbers.
|
3821
|
-
(line
|
3803
|
+
(line 41)
|
3822
3804
|
* mpz_random2: Integer Random Numbers.
|
3823
|
-
(line
|
3805
|
+
(line 50)
|
3824
3806
|
* mpz_realloc2: Initializing Integers.
|
3825
|
-
(line
|
3807
|
+
(line 56)
|
3826
3808
|
* mpz_remove: Number Theoretic Functions.
|
3827
|
-
(line
|
3809
|
+
(line 102)
|
3828
3810
|
* mpz_roinit_n: Integer Special Functions.
|
3829
|
-
(line
|
3811
|
+
(line 67)
|
3830
3812
|
* MPZ_ROINIT_N: Integer Special Functions.
|
3831
|
-
(line
|
3832
|
-
* mpz_root: Integer Roots. (line
|
3833
|
-
* mpz_rootrem: Integer Roots. (line
|
3813
|
+
(line 83)
|
3814
|
+
* mpz_root: Integer Roots. (line 6)
|
3815
|
+
* mpz_rootrem: Integer Roots. (line 12)
|
3834
3816
|
* mpz_rrandomb: Integer Random Numbers.
|
3835
|
-
(line
|
3817
|
+
(line 29)
|
3836
3818
|
* mpz_scan0: Integer Logic and Bit Fiddling.
|
3837
|
-
(line
|
3819
|
+
(line 35)
|
3838
3820
|
* mpz_scan1: Integer Logic and Bit Fiddling.
|
3839
|
-
(line
|
3840
|
-
* mpz_set: Assigning Integers. (line
|
3841
|
-
* mpz_set_d: Assigning Integers. (line 13)
|
3842
|
-
* mpz_set_f: Assigning Integers. (line 15)
|
3843
|
-
* mpz_set_q: Assigning Integers. (line 14)
|
3844
|
-
* mpz_set_si: Assigning Integers. (line 12)
|
3845
|
-
* mpz_set_str: Assigning Integers. (line 21)
|
3846
|
-
* mpz_set_ui: Assigning Integers. (line 11)
|
3821
|
+
(line 37)
|
3822
|
+
* mpz_set: Assigning Integers. (line 9)
|
3847
3823
|
* mpz_setbit: Integer Logic and Bit Fiddling.
|
3848
|
-
(line
|
3849
|
-
*
|
3850
|
-
*
|
3851
|
-
|
3824
|
+
(line 51)
|
3825
|
+
* mpz_set_d: Assigning Integers. (line 12)
|
3826
|
+
* mpz_set_f: Assigning Integers. (line 14)
|
3827
|
+
* mpz_set_q: Assigning Integers. (line 13)
|
3828
|
+
* mpz_set_si: Assigning Integers. (line 11)
|
3829
|
+
* mpz_set_str: Assigning Integers. (line 20)
|
3830
|
+
* mpz_set_ui: Assigning Integers. (line 10)
|
3831
|
+
* mpz_sgn: Integer Comparisons. (line 27)
|
3852
3832
|
* mpz_size: Integer Special Functions.
|
3853
|
-
(line
|
3833
|
+
(line 30)
|
3854
3834
|
* mpz_sizeinbase: Miscellaneous Integer Functions.
|
3855
|
-
(line
|
3856
|
-
*
|
3857
|
-
|
3858
|
-
*
|
3859
|
-
*
|
3860
|
-
*
|
3861
|
-
*
|
3862
|
-
*
|
3835
|
+
(line 22)
|
3836
|
+
* mpz_si_kronecker: Number Theoretic Functions.
|
3837
|
+
(line 89)
|
3838
|
+
* mpz_sqrt: Integer Roots. (line 17)
|
3839
|
+
* mpz_sqrtrem: Integer Roots. (line 20)
|
3840
|
+
* mpz_sub: Integer Arithmetic. (line 11)
|
3841
|
+
* mpz_submul: Integer Arithmetic. (line 30)
|
3842
|
+
* mpz_submul_ui: Integer Arithmetic. (line 32)
|
3843
|
+
* mpz_sub_ui: Integer Arithmetic. (line 12)
|
3844
|
+
* mpz_swap: Assigning Integers. (line 36)
|
3863
3845
|
* mpz_t: Nomenclature and Types.
|
3864
3846
|
(line 6)
|
3865
|
-
* mpz_tdiv_q: Integer Division. (line
|
3866
|
-
*
|
3867
|
-
*
|
3868
|
-
*
|
3869
|
-
*
|
3870
|
-
* mpz_tdiv_r: Integer Division. (line
|
3871
|
-
* mpz_tdiv_r_2exp: Integer Division. (line
|
3872
|
-
* mpz_tdiv_r_ui: Integer Division. (line
|
3873
|
-
* mpz_tdiv_ui: Integer Division. (line
|
3847
|
+
* mpz_tdiv_q: Integer Division. (line 54)
|
3848
|
+
* mpz_tdiv_qr: Integer Division. (line 56)
|
3849
|
+
* mpz_tdiv_qr_ui: Integer Division. (line 63)
|
3850
|
+
* mpz_tdiv_q_2exp: Integer Division. (line 68)
|
3851
|
+
* mpz_tdiv_q_ui: Integer Division. (line 59)
|
3852
|
+
* mpz_tdiv_r: Integer Division. (line 55)
|
3853
|
+
* mpz_tdiv_r_2exp: Integer Division. (line 71)
|
3854
|
+
* mpz_tdiv_r_ui: Integer Division. (line 61)
|
3855
|
+
* mpz_tdiv_ui: Integer Division. (line 65)
|
3874
3856
|
* mpz_tstbit: Integer Logic and Bit Fiddling.
|
3875
|
-
(line
|
3857
|
+
(line 60)
|
3876
3858
|
* mpz_ui_kronecker: Number Theoretic Functions.
|
3877
|
-
(line
|
3859
|
+
(line 90)
|
3878
3860
|
* mpz_ui_pow_ui: Integer Exponentiation.
|
3879
|
-
(line
|
3880
|
-
* mpz_ui_sub: Integer Arithmetic. (line
|
3861
|
+
(line 31)
|
3862
|
+
* mpz_ui_sub: Integer Arithmetic. (line 14)
|
3881
3863
|
* mpz_urandomb: Integer Random Numbers.
|
3882
|
-
(line
|
3864
|
+
(line 12)
|
3883
3865
|
* mpz_urandomm: Integer Random Numbers.
|
3884
|
-
(line
|
3866
|
+
(line 21)
|
3885
3867
|
* mpz_xor: Integer Logic and Bit Fiddling.
|
3886
|
-
(line
|
3887
|
-
*
|
3888
|
-
(line
|
3889
|
-
*
|
3890
|
-
(line
|
3868
|
+
(line 16)
|
3869
|
+
* mp_bitcnt_t: Nomenclature and Types.
|
3870
|
+
(line 42)
|
3871
|
+
* mp_bits_per_limb: Useful Macros and Constants.
|
3872
|
+
(line 7)
|
3873
|
+
* mp_exp_t: Nomenclature and Types.
|
3874
|
+
(line 27)
|
3875
|
+
* mp_get_memory_functions: Custom Allocation. (line 86)
|
3876
|
+
* mp_limb_t: Nomenclature and Types.
|
3877
|
+
(line 31)
|
3878
|
+
* mp_set_memory_functions: Custom Allocation. (line 14)
|
3879
|
+
* mp_size_t: Nomenclature and Types.
|
3880
|
+
(line 37)
|
3891
3881
|
* operator"": C++ Interface Integers.
|
3892
|
-
(line
|
3882
|
+
(line 29)
|
3883
|
+
* operator"" <1>: C++ Interface Rationals.
|
3884
|
+
(line 36)
|
3885
|
+
* operator"" <2>: C++ Interface Floats.
|
3886
|
+
(line 55)
|
3893
3887
|
* operator%: C++ Interface Integers.
|
3894
|
-
(line 35)
|
3895
|
-
* operator/: C++ Interface Integers.
|
3896
3888
|
(line 34)
|
3897
|
-
* operator
|
3889
|
+
* operator/: C++ Interface Integers.
|
3898
3890
|
(line 33)
|
3899
|
-
* operator
|
3900
|
-
|
3901
|
-
|
3902
|
-
|
3903
|
-
*
|
3904
|
-
(line
|
3905
|
-
*
|
3891
|
+
* operator<<: C++ Formatted Output.
|
3892
|
+
(line 10)
|
3893
|
+
* operator<< <1>: C++ Formatted Output.
|
3894
|
+
(line 19)
|
3895
|
+
* operator<< <2>: C++ Formatted Output.
|
3896
|
+
(line 32)
|
3897
|
+
* operator>>: C++ Formatted Input. (line 10)
|
3898
|
+
* operator>> <1>: C++ Formatted Input. (line 13)
|
3899
|
+
* operator>> <2>: C++ Formatted Input. (line 24)
|
3900
|
+
* operator>> <3>: C++ Interface Rationals.
|
3901
|
+
(line 86)
|
3902
|
+
* sgn: C++ Interface Integers.
|
3903
|
+
(line 65)
|
3904
|
+
* sgn <1>: C++ Interface Rationals.
|
3906
3905
|
(line 56)
|
3907
|
-
* sgn
|
3908
|
-
(line
|
3909
|
-
* sqrt
|
3910
|
-
(line
|
3911
|
-
* sqrt
|
3912
|
-
(line
|
3913
|
-
* swap <1>: C++ Interface Floats.
|
3914
|
-
(line 105)
|
3915
|
-
* swap <2>: C++ Interface Rationals.
|
3916
|
-
(line 58)
|
3906
|
+
* sgn <2>: C++ Interface Floats.
|
3907
|
+
(line 106)
|
3908
|
+
* sqrt: C++ Interface Integers.
|
3909
|
+
(line 66)
|
3910
|
+
* sqrt <1>: C++ Interface Floats.
|
3911
|
+
(line 107)
|
3917
3912
|
* swap: C++ Interface Integers.
|
3918
|
-
(line
|
3913
|
+
(line 72)
|
3914
|
+
* swap <1>: C++ Interface Rationals.
|
3915
|
+
(line 59)
|
3916
|
+
* swap <2>: C++ Interface Floats.
|
3917
|
+
(line 110)
|
3919
3918
|
* trunc: C++ Interface Floats.
|
3920
|
-
(line
|
3921
|
-
|
3919
|
+
(line 111)
|
3922
3920
|
|