glib2 3.1.3-x64-mingw32 → 3.1.4-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- 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-win64-helper-console.exe +0 -0
- data/vendor/local/bin/gspawn-win64-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
|
|