aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--awklib/eg/lib/have_mpfr.awk9
-rw-r--r--doc/ChangeLog5
-rw-r--r--doc/gawk.info1198
-rw-r--r--doc/gawk.texi58
-rw-r--r--doc/gawktexi.in58
5 files changed, 746 insertions, 582 deletions
diff --git a/awklib/eg/lib/have_mpfr.awk b/awklib/eg/lib/have_mpfr.awk
new file mode 100644
index 00000000..90bd523b
--- /dev/null
+++ b/awklib/eg/lib/have_mpfr.awk
@@ -0,0 +1,9 @@
+# adequate_math_precision --- return true if we have enough bits
+#
+# Andrew Schorr, aschorr@telemetry-investments.com, Public Domain
+# May 2017
+
+function adequate_math_precision(n)
+{
+ return (1 != (1+(1/(2^(n-1)))))
+}
diff --git a/doc/ChangeLog b/doc/ChangeLog
index d351a3f1..8249c0be 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,8 @@
+2017-05-29 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in (Checking for MPFR): New node on checking if
+ gawk was invoked with -M.
+
2017-05-22 Arnold D. Robbins <arnold@skeeve.com>
* gawktexi.in: Document FIELDWIDTHS much better, including how
diff --git a/doc/gawk.info b/doc/gawk.info
index b57abbd3..b7b6b48c 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -536,6 +536,7 @@ in (a) below. A copy of the license is included in the section entitled
* Setting the rounding mode:: How to set the rounding mode.
* Arbitrary Precision Integers:: Arbitrary Precision Integer Arithmetic
with 'gawk'.
+* Checking for MPFR:: How to check if MPFR is available.
* POSIX Floating Point Problems:: Standards Versus Existing Practice.
* Floating point summary:: Summary of floating point discussion.
* Extension Intro:: What is an extension.
@@ -22468,6 +22469,7 @@ are not quite in agreement.
* FP Math Caution:: Things to know.
* Arbitrary Precision Integers:: Arbitrary Precision Integer Arithmetic with
'gawk'.
+* Checking for MPFR:: How to check if MPFR is available.
* POSIX Floating Point Problems:: Standards Versus Existing Practice.
* Floating point summary:: Summary of floating point discussion.
@@ -23107,7 +23109,7 @@ library in your system does not use the IEEE 754 even-rounding rule to
round halfway cases for 'printf'.

-File: gawk.info, Node: Arbitrary Precision Integers, Next: POSIX Floating Point Problems, Prev: FP Math Caution, Up: Arbitrary Precision Arithmetic
+File: gawk.info, Node: Arbitrary Precision Integers, Next: Checking for MPFR, Prev: FP Math Caution, Up: Arbitrary Precision Arithmetic
15.5 Arbitrary-Precision Integer Arithmetic with 'gawk'
=======================================================
@@ -23185,9 +23187,46 @@ Wolfram Web Resource
(<http://mathworld.wolfram.com/SylvestersSequence.html>).

-File: gawk.info, Node: POSIX Floating Point Problems, Next: Floating point summary, Prev: Arbitrary Precision Integers, Up: Arbitrary Precision Arithmetic
+File: gawk.info, Node: Checking for MPFR, Next: POSIX Floating Point Problems, Prev: Arbitrary Precision Integers, Up: Arbitrary Precision Arithmetic
-15.6 Standards Versus Existing Practice
+15.6 How To Check If MPFR Is Available
+======================================
+
+Occasionally, you might like to be able to check if 'gawk' was invoked
+with the '-M' option, enabling aribtrary-precision arithmetic. You can
+do so with the following function, contributed by Andrew Schorr:
+
+ # adequate_math_precision --- return true if we have enough bits
+
+ function adequate_math_precision(n)
+ {
+ return (1 != (1+(1/(2^(n-1)))))
+ }
+
+ Here is code that invokes the function in order to check if
+arbitrary-precision arithmetic is available:
+
+ BEGIN {
+ # How many bits of mantissa precision are required
+ # for this program to function properly?
+ fpbits = 123
+
+ # We hope that we were invoked with MPFR enabled. If so, the
+ # following statement should configure calculations to our desired
+ # precision.
+ PREC = fpbits
+
+ if (! adequate_math_precision(fpbits)) {
+ print("Error: insufficient computation precision available.\n" \
+ "Try again with the -M argument?") > "/dev/stderr"
+ exit 1
+ }
+ }
+
+
+File: gawk.info, Node: POSIX Floating Point Problems, Next: Floating point summary, Prev: Checking for MPFR, Up: Arbitrary Precision Arithmetic
+
+15.7 Standards Versus Existing Practice
=======================================
Historically, 'awk' has converted any nonnumeric-looking string to the
@@ -23274,7 +23313,7 @@ and infinity values. The solution implemented in 'gawk' is as follows:

File: gawk.info, Node: Floating point summary, Prev: POSIX Floating Point Problems, Up: Arbitrary Precision Arithmetic
-15.7 Summary
+15.8 Summary
============
* Most computer arithmetic is done using either integers or
@@ -33207,6 +33246,7 @@ Index
* Chassell, Robert J.: Acknowledgments. (line 33)
* chdir() extension function: Extension Sample File Functions.
(line 12)
+* checking for MPFR: Checking for MPFR. (line 6)
* chem utility: Glossary. (line 206)
* chr() extension function: Extension Sample Ord.
(line 15)
@@ -34533,6 +34573,7 @@ Index
* modifiers, in format specifiers: Format Modifiers. (line 6)
* monetary information, localization: Explaining gettext. (line 104)
* Moore, Duncan: Getline Notes. (line 40)
+* MPFR, checking availability of: Checking for MPFR. (line 6)
* msgfmt utility: I18N Example. (line 66)
* multiple precision: Arbitrary Precision Arithmetic.
(line 6)
@@ -35603,579 +35644,580 @@ Index

Tag Table:
Node: Top1200
-Node: Foreword343204
-Node: Foreword447646
-Node: Preface49178
-Ref: Preface-Footnote-152037
-Ref: Preface-Footnote-252144
-Ref: Preface-Footnote-352378
-Node: History52520
-Node: Names54872
-Ref: Names-Footnote-155966
-Node: This Manual56113
-Ref: This Manual-Footnote-162598
-Node: Conventions62698
-Node: Manual History65052
-Ref: Manual History-Footnote-168047
-Ref: Manual History-Footnote-268088
-Node: How To Contribute68162
-Node: Acknowledgments68813
-Node: Getting Started73699
-Node: Running gawk76138
-Node: One-shot77328
-Node: Read Terminal78591
-Node: Long80584
-Node: Executable Scripts82097
-Ref: Executable Scripts-Footnote-184892
-Node: Comments84995
-Node: Quoting87479
-Node: DOS Quoting92996
-Node: Sample Data Files95051
-Node: Very Simple97646
-Node: Two Rules102548
-Node: More Complex104433
-Node: Statements/Lines107299
-Ref: Statements/Lines-Footnote-1111758
-Node: Other Features112023
-Node: When112959
-Ref: When-Footnote-1114713
-Node: Intro Summary114778
-Node: Invoking Gawk115662
-Node: Command Line117176
-Node: Options117974
-Ref: Options-Footnote-1134593
-Ref: Options-Footnote-2134823
-Node: Other Arguments134848
-Node: Naming Standard Input137795
-Node: Environment Variables138888
-Node: AWKPATH Variable139446
-Ref: AWKPATH Variable-Footnote-1142857
-Ref: AWKPATH Variable-Footnote-2142891
-Node: AWKLIBPATH Variable143152
-Node: Other Environment Variables144409
-Node: Exit Status148230
-Node: Include Files148907
-Node: Loading Shared Libraries152502
-Node: Obsolete153930
-Node: Undocumented154622
-Node: Invoking Summary154919
-Node: Regexp156579
-Node: Regexp Usage158033
-Node: Escape Sequences160070
-Node: Regexp Operators166302
-Ref: Regexp Operators-Footnote-1173718
-Ref: Regexp Operators-Footnote-2173865
-Node: Bracket Expressions173963
-Ref: table-char-classes176439
-Node: Leftmost Longest179576
-Node: Computed Regexps180879
-Node: GNU Regexp Operators184306
-Node: Case-sensitivity187985
-Ref: Case-sensitivity-Footnote-1190872
-Ref: Case-sensitivity-Footnote-2191107
-Node: Regexp Summary191215
-Node: Reading Files192681
-Node: Records194950
-Node: awk split records195683
-Node: gawk split records200614
-Ref: gawk split records-Footnote-1205154
-Node: Fields205191
-Node: Nonconstant Fields207932
-Ref: Nonconstant Fields-Footnote-1210168
-Node: Changing Fields210372
-Node: Field Separators216300
-Node: Default Field Splitting218998
-Node: Regexp Field Splitting220116
-Node: Single Character Fields223469
-Node: Command Line Field Separator224529
-Node: Full Line Fields227747
-Ref: Full Line Fields-Footnote-1229269
-Ref: Full Line Fields-Footnote-2229315
-Node: Field Splitting Summary229416
-Node: Constant Size231490
-Node: Fixed width data232222
-Node: Skipping intervening235689
-Node: Allowing trailing data236487
-Node: Fields with fixed data237524
-Node: Splitting By Content239042
-Ref: Splitting By Content-Footnote-1242692
-Node: Testing field creation242855
-Node: Multiple Line244476
-Ref: Multiple Line-Footnote-1250360
-Node: Getline250539
-Node: Plain Getline253008
-Node: Getline/Variable255649
-Node: Getline/File256800
-Node: Getline/Variable/File258188
-Ref: Getline/Variable/File-Footnote-1259793
-Node: Getline/Pipe259881
-Node: Getline/Variable/Pipe262588
-Node: Getline/Coprocess263723
-Node: Getline/Variable/Coprocess264990
-Node: Getline Notes265732
-Node: Getline Summary268529
-Ref: table-getline-variants268953
-Node: Read Timeout269701
-Ref: Read Timeout-Footnote-1273607
-Node: Retrying Input273665
-Node: Command-line directories274864
-Node: Input Summary275770
-Node: Input Exercises278942
-Node: Printing279670
-Node: Print281504
-Node: Print Examples282961
-Node: Output Separators285741
-Node: OFMT287758
-Node: Printf289114
-Node: Basic Printf289899
-Node: Control Letters291473
-Node: Format Modifiers295461
-Node: Printf Examples301476
-Node: Redirection303962
-Node: Special FD310803
-Ref: Special FD-Footnote-1313971
-Node: Special Files314045
-Node: Other Inherited Files314662
-Node: Special Network315663
-Node: Special Caveats316523
-Node: Close Files And Pipes317472
-Ref: table-close-pipe-return-values324379
-Ref: Close Files And Pipes-Footnote-1325162
-Ref: Close Files And Pipes-Footnote-2325310
-Node: Nonfatal325462
-Node: Output Summary327787
-Node: Output Exercises329009
-Node: Expressions329688
-Node: Values330876
-Node: Constants331554
-Node: Scalar Constants332245
-Ref: Scalar Constants-Footnote-1333109
-Node: Nondecimal-numbers333359
-Node: Regexp Constants336360
-Node: Using Constant Regexps336886
-Node: Standard Regexp Constants337508
-Node: Strong Regexp Constants340696
-Node: Variables343654
-Node: Using Variables344311
-Node: Assignment Options346221
-Node: Conversion348094
-Node: Strings And Numbers348618
-Ref: Strings And Numbers-Footnote-1351681
-Node: Locale influences conversions351790
-Ref: table-locale-affects354548
-Node: All Operators355166
-Node: Arithmetic Ops355795
-Node: Concatenation358301
-Ref: Concatenation-Footnote-1361148
-Node: Assignment Ops361255
-Ref: table-assign-ops366246
-Node: Increment Ops367559
-Node: Truth Values and Conditions371019
-Node: Truth Values372093
-Node: Typing and Comparison373141
-Node: Variable Typing373961
-Ref: Variable Typing-Footnote-1380424
-Ref: Variable Typing-Footnote-2380496
-Node: Comparison Operators380573
-Ref: table-relational-ops380992
-Node: POSIX String Comparison384487
-Ref: POSIX String Comparison-Footnote-1386182
-Ref: POSIX String Comparison-Footnote-2386321
-Node: Boolean Ops386405
-Ref: Boolean Ops-Footnote-1390887
-Node: Conditional Exp390979
-Node: Function Calls392715
-Node: Precedence396592
-Node: Locales400251
-Node: Expressions Summary401883
-Node: Patterns and Actions404456
-Node: Pattern Overview405576
-Node: Regexp Patterns407253
-Node: Expression Patterns407795
-Node: Ranges411576
-Node: BEGIN/END414684
-Node: Using BEGIN/END415445
-Ref: Using BEGIN/END-Footnote-1418181
-Node: I/O And BEGIN/END418287
-Node: BEGINFILE/ENDFILE420601
-Node: Empty423508
-Node: Using Shell Variables423825
-Node: Action Overview426099
-Node: Statements428424
-Node: If Statement430272
-Node: While Statement431767
-Node: Do Statement433795
-Node: For Statement434943
-Node: Switch Statement438101
-Node: Break Statement440487
-Node: Continue Statement442579
-Node: Next Statement444406
-Node: Nextfile Statement446789
-Node: Exit Statement449441
-Node: Built-in Variables451844
-Node: User-modified452977
-Node: Auto-set460744
-Ref: Auto-set-Footnote-1475472
-Ref: Auto-set-Footnote-2475678
-Node: ARGC and ARGV475734
-Node: Pattern Action Summary479947
-Node: Arrays482377
-Node: Array Basics483706
-Node: Array Intro484550
-Ref: figure-array-elements486525
-Ref: Array Intro-Footnote-1489229
-Node: Reference to Elements489357
-Node: Assigning Elements491821
-Node: Array Example492312
-Node: Scanning an Array494071
-Node: Controlling Scanning497093
-Ref: Controlling Scanning-Footnote-1502492
-Node: Numeric Array Subscripts502808
-Node: Uninitialized Subscripts504992
-Node: Delete506611
-Ref: Delete-Footnote-1509363
-Node: Multidimensional509420
-Node: Multiscanning512515
-Node: Arrays of Arrays514106
-Node: Arrays Summary518873
-Node: Functions520966
-Node: Built-in522004
-Node: Calling Built-in523085
-Node: Numeric Functions525081
-Ref: Numeric Functions-Footnote-1529109
-Ref: Numeric Functions-Footnote-2529466
-Ref: Numeric Functions-Footnote-3529514
-Node: String Functions529786
-Ref: String Functions-Footnote-1553444
-Ref: String Functions-Footnote-2553572
-Ref: String Functions-Footnote-3553820
-Node: Gory Details553907
-Ref: table-sub-escapes555698
-Ref: table-sub-proposed557217
-Ref: table-posix-sub558580
-Ref: table-gensub-escapes560121
-Ref: Gory Details-Footnote-1560944
-Node: I/O Functions561098
-Ref: table-system-return-values567680
-Ref: I/O Functions-Footnote-1569660
-Ref: I/O Functions-Footnote-2569808
-Node: Time Functions569928
-Ref: Time Functions-Footnote-1580595
-Ref: Time Functions-Footnote-2580663
-Ref: Time Functions-Footnote-3580821
-Ref: Time Functions-Footnote-4580932
-Ref: Time Functions-Footnote-5581044
-Ref: Time Functions-Footnote-6581271
-Node: Bitwise Functions581537
-Ref: table-bitwise-ops582131
-Ref: Bitwise Functions-Footnote-1588164
-Ref: Bitwise Functions-Footnote-2588337
-Node: Type Functions588528
-Node: I18N Functions591203
-Node: User-defined592854
-Node: Definition Syntax593659
-Ref: Definition Syntax-Footnote-1599346
-Node: Function Example599417
-Ref: Function Example-Footnote-1602339
-Node: Function Caveats602361
-Node: Calling A Function602879
-Node: Variable Scope603837
-Node: Pass By Value/Reference606831
-Node: Return Statement610330
-Node: Dynamic Typing613309
-Node: Indirect Calls614239
-Ref: Indirect Calls-Footnote-1624490
-Node: Functions Summary624618
-Node: Library Functions627323
-Ref: Library Functions-Footnote-1630930
-Ref: Library Functions-Footnote-2631073
-Node: Library Names631244
-Ref: Library Names-Footnote-1634704
-Ref: Library Names-Footnote-2634927
-Node: General Functions635013
-Node: Strtonum Function636116
-Node: Assert Function639138
-Node: Round Function642464
-Node: Cliff Random Function644005
-Node: Ordinal Functions645021
-Ref: Ordinal Functions-Footnote-1648084
-Ref: Ordinal Functions-Footnote-2648336
-Node: Join Function648546
-Ref: Join Function-Footnote-1650316
-Node: Getlocaltime Function650516
-Node: Readfile Function654258
-Node: Shell Quoting656230
-Node: Data File Management657631
-Node: Filetrans Function658263
-Node: Rewind Function662359
-Node: File Checking664265
-Ref: File Checking-Footnote-1665599
-Node: Empty Files665800
-Node: Ignoring Assigns667779
-Node: Getopt Function669329
-Ref: Getopt Function-Footnote-1680798
-Node: Passwd Functions680998
-Ref: Passwd Functions-Footnote-1689837
-Node: Group Functions689925
-Ref: Group Functions-Footnote-1697823
-Node: Walking Arrays698030
-Node: Library Functions Summary701038
-Node: Library Exercises702444
-Node: Sample Programs702909
-Node: Running Examples703679
-Node: Clones704407
-Node: Cut Program705631
-Node: Egrep Program715560
-Ref: Egrep Program-Footnote-1723072
-Node: Id Program723182
-Node: Split Program726862
-Ref: Split Program-Footnote-1730321
-Node: Tee Program730450
-Node: Uniq Program733240
-Node: Wc Program740666
-Ref: Wc Program-Footnote-1744921
-Node: Miscellaneous Programs745015
-Node: Dupword Program746228
-Node: Alarm Program748258
-Node: Translate Program753113
-Ref: Translate Program-Footnote-1757678
-Node: Labels Program757948
-Ref: Labels Program-Footnote-1761299
-Node: Word Sorting761383
-Node: History Sorting765455
-Node: Extract Program767290
-Node: Simple Sed774819
-Node: Igawk Program777893
-Ref: Igawk Program-Footnote-1792224
-Ref: Igawk Program-Footnote-2792426
-Ref: Igawk Program-Footnote-3792548
-Node: Anagram Program792663
-Node: Signature Program795725
-Node: Programs Summary796972
-Node: Programs Exercises798186
-Ref: Programs Exercises-Footnote-1802315
-Node: Advanced Features802406
-Node: Nondecimal Data804396
-Node: Array Sorting805987
-Node: Controlling Array Traversal806687
-Ref: Controlling Array Traversal-Footnote-1815054
-Node: Array Sorting Functions815172
-Ref: Array Sorting Functions-Footnote-1820263
-Node: Two-way I/O820459
-Ref: Two-way I/O-Footnote-1827010
-Ref: Two-way I/O-Footnote-2827197
-Node: TCP/IP Networking827279
-Node: Profiling830397
-Ref: Profiling-Footnote-1839069
-Node: Advanced Features Summary839392
-Node: Internationalization841236
-Node: I18N and L10N842716
-Node: Explaining gettext843403
-Ref: Explaining gettext-Footnote-1849295
-Ref: Explaining gettext-Footnote-2849480
-Node: Programmer i18n849645
-Ref: Programmer i18n-Footnote-1854594
-Node: Translator i18n854643
-Node: String Extraction855437
-Ref: String Extraction-Footnote-1856569
-Node: Printf Ordering856655
-Ref: Printf Ordering-Footnote-1859441
-Node: I18N Portability859505
-Ref: I18N Portability-Footnote-1861961
-Node: I18N Example862024
-Ref: I18N Example-Footnote-1864830
-Node: Gawk I18N864903
-Node: I18N Summary865548
-Node: Debugger866889
-Node: Debugging867911
-Node: Debugging Concepts868352
-Node: Debugging Terms870161
-Node: Awk Debugging872736
-Node: Sample Debugging Session873642
-Node: Debugger Invocation874176
-Node: Finding The Bug875562
-Node: List of Debugger Commands882040
-Node: Breakpoint Control883373
-Node: Debugger Execution Control887067
-Node: Viewing And Changing Data890429
-Node: Execution Stack893803
-Node: Debugger Info895440
-Node: Miscellaneous Debugger Commands899511
-Node: Readline Support904599
-Node: Limitations905495
-Node: Debugging Summary907604
-Node: Arbitrary Precision Arithmetic908883
-Node: Computer Arithmetic910299
-Ref: table-numeric-ranges913890
-Ref: Computer Arithmetic-Footnote-1914612
-Node: Math Definitions914669
-Ref: table-ieee-formats917983
-Ref: Math Definitions-Footnote-1918586
-Node: MPFR features918691
-Node: FP Math Caution920408
-Ref: FP Math Caution-Footnote-1921480
-Node: Inexactness of computations921849
-Node: Inexact representation922809
-Node: Comparing FP Values924169
-Node: Errors accumulate925251
-Node: Getting Accuracy926684
-Node: Try To Round929394
-Node: Setting precision930293
-Ref: table-predefined-precision-strings930990
-Node: Setting the rounding mode932820
-Ref: table-gawk-rounding-modes933194
-Ref: Setting the rounding mode-Footnote-1936602
-Node: Arbitrary Precision Integers936781
-Ref: Arbitrary Precision Integers-Footnote-1939968
-Node: POSIX Floating Point Problems940117
-Ref: POSIX Floating Point Problems-Footnote-1943999
-Node: Floating point summary944037
-Node: Dynamic Extensions946227
-Node: Extension Intro947780
-Node: Plugin License949046
-Node: Extension Mechanism Outline949843
-Ref: figure-load-extension950282
-Ref: figure-register-new-function951847
-Ref: figure-call-new-function952939
-Node: Extension API Description955001
-Node: Extension API Functions Introduction956643
-Node: General Data Types961977
-Ref: General Data Types-Footnote-1969182
-Node: Memory Allocation Functions969481
-Ref: Memory Allocation Functions-Footnote-1972326
-Node: Constructor Functions972425
-Node: Registration Functions975424
-Node: Extension Functions976109
-Node: Exit Callback Functions981322
-Node: Extension Version String982572
-Node: Input Parsers983235
-Node: Output Wrappers995942
-Node: Two-way processors1000454
-Node: Printing Messages1002719
-Ref: Printing Messages-Footnote-11003890
-Node: Updating ERRNO1004043
-Node: Requesting Values1004782
-Ref: table-value-types-returned1005519
-Node: Accessing Parameters1006455
-Node: Symbol Table Access1007690
-Node: Symbol table by name1008202
-Node: Symbol table by cookie1009991
-Ref: Symbol table by cookie-Footnote-11014176
-Node: Cached values1014240
-Ref: Cached values-Footnote-11017776
-Node: Array Manipulation1017867
-Ref: Array Manipulation-Footnote-11018958
-Node: Array Data Types1018995
-Ref: Array Data Types-Footnote-11021653
-Node: Array Functions1021745
-Node: Flattening Arrays1026144
-Node: Creating Arrays1033085
-Node: Redirection API1037854
-Node: Extension API Variables1040696
-Node: Extension Versioning1041329
-Ref: gawk-api-version1041766
-Node: Extension API Informational Variables1043494
-Node: Extension API Boilerplate1044558
-Node: Changes from API V11048420
-Node: Finding Extensions1049080
-Node: Extension Example1049639
-Node: Internal File Description1050437
-Node: Internal File Ops1054517
-Ref: Internal File Ops-Footnote-11065917
-Node: Using Internal File Ops1066057
-Ref: Using Internal File Ops-Footnote-11068440
-Node: Extension Samples1068714
-Node: Extension Sample File Functions1070243
-Node: Extension Sample Fnmatch1077892
-Node: Extension Sample Fork1079379
-Node: Extension Sample Inplace1080597
-Node: Extension Sample Ord1083807
-Node: Extension Sample Readdir1084643
-Ref: table-readdir-file-types1085532
-Node: Extension Sample Revout1086337
-Node: Extension Sample Rev2way1086926
-Node: Extension Sample Read write array1087666
-Node: Extension Sample Readfile1089608
-Node: Extension Sample Time1090703
-Node: Extension Sample API Tests1092051
-Node: gawkextlib1092543
-Node: Extension summary1094990
-Node: Extension Exercises1098692
-Node: Language History1100190
-Node: V7/SVR3.11101846
-Node: SVR41103998
-Node: POSIX1105432
-Node: BTL1106811
-Node: POSIX/GNU1107540
-Node: Feature History1113318
-Node: Common Extensions1127629
-Node: Ranges and Locales1128912
-Ref: Ranges and Locales-Footnote-11133528
-Ref: Ranges and Locales-Footnote-21133555
-Ref: Ranges and Locales-Footnote-31133790
-Node: Contributors1134011
-Node: History summary1139571
-Node: Installation1140951
-Node: Gawk Distribution1141895
-Node: Getting1142379
-Node: Extracting1143340
-Node: Distribution contents1144978
-Node: Unix Installation1151320
-Node: Quick Installation1152002
-Node: Shell Startup Files1154416
-Node: Additional Configuration Options1155505
-Node: Configuration Philosophy1157494
-Node: Non-Unix Installation1159863
-Node: PC Installation1160323
-Node: PC Binary Installation1161161
-Node: PC Compiling1161596
-Node: PC Using1162713
-Node: Cygwin1165758
-Node: MSYS1166528
-Node: VMS Installation1167029
-Node: VMS Compilation1167820
-Ref: VMS Compilation-Footnote-11169049
-Node: VMS Dynamic Extensions1169107
-Node: VMS Installation Details1170792
-Node: VMS Running1173045
-Node: VMS GNV1177324
-Node: VMS Old Gawk1178059
-Node: Bugs1178530
-Node: Bug address1179193
-Node: Usenet1181590
-Node: Maintainers1182367
-Node: Other Versions1183743
-Node: Installation summary1190327
-Node: Notes1191362
-Node: Compatibility Mode1192227
-Node: Additions1193009
-Node: Accessing The Source1193934
-Node: Adding Code1195369
-Node: New Ports1201587
-Node: Derived Files1206075
-Ref: Derived Files-Footnote-11211560
-Ref: Derived Files-Footnote-21211595
-Ref: Derived Files-Footnote-31212193
-Node: Future Extensions1212307
-Node: Implementation Limitations1212965
-Node: Extension Design1214148
-Node: Old Extension Problems1215302
-Ref: Old Extension Problems-Footnote-11216820
-Node: Extension New Mechanism Goals1216877
-Ref: Extension New Mechanism Goals-Footnote-11220241
-Node: Extension Other Design Decisions1220430
-Node: Extension Future Growth1222543
-Node: Old Extension Mechanism1223379
-Node: Notes summary1225142
-Node: Basic Concepts1226324
-Node: Basic High Level1227005
-Ref: figure-general-flow1227287
-Ref: figure-process-flow1227972
-Ref: Basic High Level-Footnote-11231273
-Node: Basic Data Typing1231458
-Node: Glossary1234786
-Node: Copying1266733
-Node: GNU Free Documentation License1304272
-Node: Index1329390
+Node: Foreword343279
+Node: Foreword447721
+Node: Preface49253
+Ref: Preface-Footnote-152112
+Ref: Preface-Footnote-252219
+Ref: Preface-Footnote-352453
+Node: History52595
+Node: Names54947
+Ref: Names-Footnote-156041
+Node: This Manual56188
+Ref: This Manual-Footnote-162673
+Node: Conventions62773
+Node: Manual History65127
+Ref: Manual History-Footnote-168122
+Ref: Manual History-Footnote-268163
+Node: How To Contribute68237
+Node: Acknowledgments68888
+Node: Getting Started73774
+Node: Running gawk76213
+Node: One-shot77403
+Node: Read Terminal78666
+Node: Long80659
+Node: Executable Scripts82172
+Ref: Executable Scripts-Footnote-184967
+Node: Comments85070
+Node: Quoting87554
+Node: DOS Quoting93071
+Node: Sample Data Files95126
+Node: Very Simple97721
+Node: Two Rules102623
+Node: More Complex104508
+Node: Statements/Lines107374
+Ref: Statements/Lines-Footnote-1111833
+Node: Other Features112098
+Node: When113034
+Ref: When-Footnote-1114788
+Node: Intro Summary114853
+Node: Invoking Gawk115737
+Node: Command Line117251
+Node: Options118049
+Ref: Options-Footnote-1134668
+Ref: Options-Footnote-2134898
+Node: Other Arguments134923
+Node: Naming Standard Input137870
+Node: Environment Variables138963
+Node: AWKPATH Variable139521
+Ref: AWKPATH Variable-Footnote-1142932
+Ref: AWKPATH Variable-Footnote-2142966
+Node: AWKLIBPATH Variable143227
+Node: Other Environment Variables144484
+Node: Exit Status148305
+Node: Include Files148982
+Node: Loading Shared Libraries152577
+Node: Obsolete154005
+Node: Undocumented154697
+Node: Invoking Summary154994
+Node: Regexp156654
+Node: Regexp Usage158108
+Node: Escape Sequences160145
+Node: Regexp Operators166377
+Ref: Regexp Operators-Footnote-1173793
+Ref: Regexp Operators-Footnote-2173940
+Node: Bracket Expressions174038
+Ref: table-char-classes176514
+Node: Leftmost Longest179651
+Node: Computed Regexps180954
+Node: GNU Regexp Operators184381
+Node: Case-sensitivity188060
+Ref: Case-sensitivity-Footnote-1190947
+Ref: Case-sensitivity-Footnote-2191182
+Node: Regexp Summary191290
+Node: Reading Files192756
+Node: Records195025
+Node: awk split records195758
+Node: gawk split records200689
+Ref: gawk split records-Footnote-1205229
+Node: Fields205266
+Node: Nonconstant Fields208007
+Ref: Nonconstant Fields-Footnote-1210243
+Node: Changing Fields210447
+Node: Field Separators216375
+Node: Default Field Splitting219073
+Node: Regexp Field Splitting220191
+Node: Single Character Fields223544
+Node: Command Line Field Separator224604
+Node: Full Line Fields227822
+Ref: Full Line Fields-Footnote-1229344
+Ref: Full Line Fields-Footnote-2229390
+Node: Field Splitting Summary229491
+Node: Constant Size231565
+Node: Fixed width data232297
+Node: Skipping intervening235764
+Node: Allowing trailing data236562
+Node: Fields with fixed data237599
+Node: Splitting By Content239117
+Ref: Splitting By Content-Footnote-1242767
+Node: Testing field creation242930
+Node: Multiple Line244551
+Ref: Multiple Line-Footnote-1250435
+Node: Getline250614
+Node: Plain Getline253083
+Node: Getline/Variable255724
+Node: Getline/File256875
+Node: Getline/Variable/File258263
+Ref: Getline/Variable/File-Footnote-1259868
+Node: Getline/Pipe259956
+Node: Getline/Variable/Pipe262663
+Node: Getline/Coprocess263798
+Node: Getline/Variable/Coprocess265065
+Node: Getline Notes265807
+Node: Getline Summary268604
+Ref: table-getline-variants269028
+Node: Read Timeout269776
+Ref: Read Timeout-Footnote-1273682
+Node: Retrying Input273740
+Node: Command-line directories274939
+Node: Input Summary275845
+Node: Input Exercises279017
+Node: Printing279745
+Node: Print281579
+Node: Print Examples283036
+Node: Output Separators285816
+Node: OFMT287833
+Node: Printf289189
+Node: Basic Printf289974
+Node: Control Letters291548
+Node: Format Modifiers295536
+Node: Printf Examples301551
+Node: Redirection304037
+Node: Special FD310878
+Ref: Special FD-Footnote-1314046
+Node: Special Files314120
+Node: Other Inherited Files314737
+Node: Special Network315738
+Node: Special Caveats316598
+Node: Close Files And Pipes317547
+Ref: table-close-pipe-return-values324454
+Ref: Close Files And Pipes-Footnote-1325237
+Ref: Close Files And Pipes-Footnote-2325385
+Node: Nonfatal325537
+Node: Output Summary327862
+Node: Output Exercises329084
+Node: Expressions329763
+Node: Values330951
+Node: Constants331629
+Node: Scalar Constants332320
+Ref: Scalar Constants-Footnote-1333184
+Node: Nondecimal-numbers333434
+Node: Regexp Constants336435
+Node: Using Constant Regexps336961
+Node: Standard Regexp Constants337583
+Node: Strong Regexp Constants340771
+Node: Variables343729
+Node: Using Variables344386
+Node: Assignment Options346296
+Node: Conversion348169
+Node: Strings And Numbers348693
+Ref: Strings And Numbers-Footnote-1351756
+Node: Locale influences conversions351865
+Ref: table-locale-affects354623
+Node: All Operators355241
+Node: Arithmetic Ops355870
+Node: Concatenation358376
+Ref: Concatenation-Footnote-1361223
+Node: Assignment Ops361330
+Ref: table-assign-ops366321
+Node: Increment Ops367634
+Node: Truth Values and Conditions371094
+Node: Truth Values372168
+Node: Typing and Comparison373216
+Node: Variable Typing374036
+Ref: Variable Typing-Footnote-1380499
+Ref: Variable Typing-Footnote-2380571
+Node: Comparison Operators380648
+Ref: table-relational-ops381067
+Node: POSIX String Comparison384562
+Ref: POSIX String Comparison-Footnote-1386257
+Ref: POSIX String Comparison-Footnote-2386396
+Node: Boolean Ops386480
+Ref: Boolean Ops-Footnote-1390962
+Node: Conditional Exp391054
+Node: Function Calls392790
+Node: Precedence396667
+Node: Locales400326
+Node: Expressions Summary401958
+Node: Patterns and Actions404531
+Node: Pattern Overview405651
+Node: Regexp Patterns407328
+Node: Expression Patterns407870
+Node: Ranges411651
+Node: BEGIN/END414759
+Node: Using BEGIN/END415520
+Ref: Using BEGIN/END-Footnote-1418256
+Node: I/O And BEGIN/END418362
+Node: BEGINFILE/ENDFILE420676
+Node: Empty423583
+Node: Using Shell Variables423900
+Node: Action Overview426174
+Node: Statements428499
+Node: If Statement430347
+Node: While Statement431842
+Node: Do Statement433870
+Node: For Statement435018
+Node: Switch Statement438176
+Node: Break Statement440562
+Node: Continue Statement442654
+Node: Next Statement444481
+Node: Nextfile Statement446864
+Node: Exit Statement449516
+Node: Built-in Variables451919
+Node: User-modified453052
+Node: Auto-set460819
+Ref: Auto-set-Footnote-1475547
+Ref: Auto-set-Footnote-2475753
+Node: ARGC and ARGV475809
+Node: Pattern Action Summary480022
+Node: Arrays482452
+Node: Array Basics483781
+Node: Array Intro484625
+Ref: figure-array-elements486600
+Ref: Array Intro-Footnote-1489304
+Node: Reference to Elements489432
+Node: Assigning Elements491896
+Node: Array Example492387
+Node: Scanning an Array494146
+Node: Controlling Scanning497168
+Ref: Controlling Scanning-Footnote-1502567
+Node: Numeric Array Subscripts502883
+Node: Uninitialized Subscripts505067
+Node: Delete506686
+Ref: Delete-Footnote-1509438
+Node: Multidimensional509495
+Node: Multiscanning512590
+Node: Arrays of Arrays514181
+Node: Arrays Summary518948
+Node: Functions521041
+Node: Built-in522079
+Node: Calling Built-in523160
+Node: Numeric Functions525156
+Ref: Numeric Functions-Footnote-1529184
+Ref: Numeric Functions-Footnote-2529541
+Ref: Numeric Functions-Footnote-3529589
+Node: String Functions529861
+Ref: String Functions-Footnote-1553519
+Ref: String Functions-Footnote-2553647
+Ref: String Functions-Footnote-3553895
+Node: Gory Details553982
+Ref: table-sub-escapes555773
+Ref: table-sub-proposed557292
+Ref: table-posix-sub558655
+Ref: table-gensub-escapes560196
+Ref: Gory Details-Footnote-1561019
+Node: I/O Functions561173
+Ref: table-system-return-values567755
+Ref: I/O Functions-Footnote-1569735
+Ref: I/O Functions-Footnote-2569883
+Node: Time Functions570003
+Ref: Time Functions-Footnote-1580670
+Ref: Time Functions-Footnote-2580738
+Ref: Time Functions-Footnote-3580896
+Ref: Time Functions-Footnote-4581007
+Ref: Time Functions-Footnote-5581119
+Ref: Time Functions-Footnote-6581346
+Node: Bitwise Functions581612
+Ref: table-bitwise-ops582206
+Ref: Bitwise Functions-Footnote-1588239
+Ref: Bitwise Functions-Footnote-2588412
+Node: Type Functions588603
+Node: I18N Functions591278
+Node: User-defined592929
+Node: Definition Syntax593734
+Ref: Definition Syntax-Footnote-1599421
+Node: Function Example599492
+Ref: Function Example-Footnote-1602414
+Node: Function Caveats602436
+Node: Calling A Function602954
+Node: Variable Scope603912
+Node: Pass By Value/Reference606906
+Node: Return Statement610405
+Node: Dynamic Typing613384
+Node: Indirect Calls614314
+Ref: Indirect Calls-Footnote-1624565
+Node: Functions Summary624693
+Node: Library Functions627398
+Ref: Library Functions-Footnote-1631005
+Ref: Library Functions-Footnote-2631148
+Node: Library Names631319
+Ref: Library Names-Footnote-1634779
+Ref: Library Names-Footnote-2635002
+Node: General Functions635088
+Node: Strtonum Function636191
+Node: Assert Function639213
+Node: Round Function642539
+Node: Cliff Random Function644080
+Node: Ordinal Functions645096
+Ref: Ordinal Functions-Footnote-1648159
+Ref: Ordinal Functions-Footnote-2648411
+Node: Join Function648621
+Ref: Join Function-Footnote-1650391
+Node: Getlocaltime Function650591
+Node: Readfile Function654333
+Node: Shell Quoting656305
+Node: Data File Management657706
+Node: Filetrans Function658338
+Node: Rewind Function662434
+Node: File Checking664340
+Ref: File Checking-Footnote-1665674
+Node: Empty Files665875
+Node: Ignoring Assigns667854
+Node: Getopt Function669404
+Ref: Getopt Function-Footnote-1680873
+Node: Passwd Functions681073
+Ref: Passwd Functions-Footnote-1689912
+Node: Group Functions690000
+Ref: Group Functions-Footnote-1697898
+Node: Walking Arrays698105
+Node: Library Functions Summary701113
+Node: Library Exercises702519
+Node: Sample Programs702984
+Node: Running Examples703754
+Node: Clones704482
+Node: Cut Program705706
+Node: Egrep Program715635
+Ref: Egrep Program-Footnote-1723147
+Node: Id Program723257
+Node: Split Program726937
+Ref: Split Program-Footnote-1730396
+Node: Tee Program730525
+Node: Uniq Program733315
+Node: Wc Program740741
+Ref: Wc Program-Footnote-1744996
+Node: Miscellaneous Programs745090
+Node: Dupword Program746303
+Node: Alarm Program748333
+Node: Translate Program753188
+Ref: Translate Program-Footnote-1757753
+Node: Labels Program758023
+Ref: Labels Program-Footnote-1761374
+Node: Word Sorting761458
+Node: History Sorting765530
+Node: Extract Program767365
+Node: Simple Sed774894
+Node: Igawk Program777968
+Ref: Igawk Program-Footnote-1792299
+Ref: Igawk Program-Footnote-2792501
+Ref: Igawk Program-Footnote-3792623
+Node: Anagram Program792738
+Node: Signature Program795800
+Node: Programs Summary797047
+Node: Programs Exercises798261
+Ref: Programs Exercises-Footnote-1802390
+Node: Advanced Features802481
+Node: Nondecimal Data804471
+Node: Array Sorting806062
+Node: Controlling Array Traversal806762
+Ref: Controlling Array Traversal-Footnote-1815129
+Node: Array Sorting Functions815247
+Ref: Array Sorting Functions-Footnote-1820338
+Node: Two-way I/O820534
+Ref: Two-way I/O-Footnote-1827085
+Ref: Two-way I/O-Footnote-2827272
+Node: TCP/IP Networking827354
+Node: Profiling830472
+Ref: Profiling-Footnote-1839144
+Node: Advanced Features Summary839467
+Node: Internationalization841311
+Node: I18N and L10N842791
+Node: Explaining gettext843478
+Ref: Explaining gettext-Footnote-1849370
+Ref: Explaining gettext-Footnote-2849555
+Node: Programmer i18n849720
+Ref: Programmer i18n-Footnote-1854669
+Node: Translator i18n854718
+Node: String Extraction855512
+Ref: String Extraction-Footnote-1856644
+Node: Printf Ordering856730
+Ref: Printf Ordering-Footnote-1859516
+Node: I18N Portability859580
+Ref: I18N Portability-Footnote-1862036
+Node: I18N Example862099
+Ref: I18N Example-Footnote-1864905
+Node: Gawk I18N864978
+Node: I18N Summary865623
+Node: Debugger866964
+Node: Debugging867986
+Node: Debugging Concepts868427
+Node: Debugging Terms870236
+Node: Awk Debugging872811
+Node: Sample Debugging Session873717
+Node: Debugger Invocation874251
+Node: Finding The Bug875637
+Node: List of Debugger Commands882115
+Node: Breakpoint Control883448
+Node: Debugger Execution Control887142
+Node: Viewing And Changing Data890504
+Node: Execution Stack893878
+Node: Debugger Info895515
+Node: Miscellaneous Debugger Commands899586
+Node: Readline Support904674
+Node: Limitations905570
+Node: Debugging Summary907679
+Node: Arbitrary Precision Arithmetic908958
+Node: Computer Arithmetic910443
+Ref: table-numeric-ranges914034
+Ref: Computer Arithmetic-Footnote-1914756
+Node: Math Definitions914813
+Ref: table-ieee-formats918127
+Ref: Math Definitions-Footnote-1918730
+Node: MPFR features918835
+Node: FP Math Caution920552
+Ref: FP Math Caution-Footnote-1921624
+Node: Inexactness of computations921993
+Node: Inexact representation922953
+Node: Comparing FP Values924313
+Node: Errors accumulate925395
+Node: Getting Accuracy926828
+Node: Try To Round929538
+Node: Setting precision930437
+Ref: table-predefined-precision-strings931134
+Node: Setting the rounding mode932964
+Ref: table-gawk-rounding-modes933338
+Ref: Setting the rounding mode-Footnote-1936746
+Node: Arbitrary Precision Integers936925
+Ref: Arbitrary Precision Integers-Footnote-1940100
+Node: Checking for MPFR940249
+Node: POSIX Floating Point Problems941546
+Ref: POSIX Floating Point Problems-Footnote-1945417
+Node: Floating point summary945455
+Node: Dynamic Extensions947645
+Node: Extension Intro949198
+Node: Plugin License950464
+Node: Extension Mechanism Outline951261
+Ref: figure-load-extension951700
+Ref: figure-register-new-function953265
+Ref: figure-call-new-function954357
+Node: Extension API Description956419
+Node: Extension API Functions Introduction958061
+Node: General Data Types963395
+Ref: General Data Types-Footnote-1970600
+Node: Memory Allocation Functions970899
+Ref: Memory Allocation Functions-Footnote-1973744
+Node: Constructor Functions973843
+Node: Registration Functions976842
+Node: Extension Functions977527
+Node: Exit Callback Functions982740
+Node: Extension Version String983990
+Node: Input Parsers984653
+Node: Output Wrappers997360
+Node: Two-way processors1001872
+Node: Printing Messages1004137
+Ref: Printing Messages-Footnote-11005308
+Node: Updating ERRNO1005461
+Node: Requesting Values1006200
+Ref: table-value-types-returned1006937
+Node: Accessing Parameters1007873
+Node: Symbol Table Access1009108
+Node: Symbol table by name1009620
+Node: Symbol table by cookie1011409
+Ref: Symbol table by cookie-Footnote-11015594
+Node: Cached values1015658
+Ref: Cached values-Footnote-11019194
+Node: Array Manipulation1019285
+Ref: Array Manipulation-Footnote-11020376
+Node: Array Data Types1020413
+Ref: Array Data Types-Footnote-11023071
+Node: Array Functions1023163
+Node: Flattening Arrays1027562
+Node: Creating Arrays1034503
+Node: Redirection API1039272
+Node: Extension API Variables1042114
+Node: Extension Versioning1042747
+Ref: gawk-api-version1043184
+Node: Extension API Informational Variables1044912
+Node: Extension API Boilerplate1045976
+Node: Changes from API V11049838
+Node: Finding Extensions1050498
+Node: Extension Example1051057
+Node: Internal File Description1051855
+Node: Internal File Ops1055935
+Ref: Internal File Ops-Footnote-11067335
+Node: Using Internal File Ops1067475
+Ref: Using Internal File Ops-Footnote-11069858
+Node: Extension Samples1070132
+Node: Extension Sample File Functions1071661
+Node: Extension Sample Fnmatch1079310
+Node: Extension Sample Fork1080797
+Node: Extension Sample Inplace1082015
+Node: Extension Sample Ord1085225
+Node: Extension Sample Readdir1086061
+Ref: table-readdir-file-types1086950
+Node: Extension Sample Revout1087755
+Node: Extension Sample Rev2way1088344
+Node: Extension Sample Read write array1089084
+Node: Extension Sample Readfile1091026
+Node: Extension Sample Time1092121
+Node: Extension Sample API Tests1093469
+Node: gawkextlib1093961
+Node: Extension summary1096408
+Node: Extension Exercises1100110
+Node: Language History1101608
+Node: V7/SVR3.11103264
+Node: SVR41105416
+Node: POSIX1106850
+Node: BTL1108229
+Node: POSIX/GNU1108958
+Node: Feature History1114736
+Node: Common Extensions1129047
+Node: Ranges and Locales1130330
+Ref: Ranges and Locales-Footnote-11134946
+Ref: Ranges and Locales-Footnote-21134973
+Ref: Ranges and Locales-Footnote-31135208
+Node: Contributors1135429
+Node: History summary1140989
+Node: Installation1142369
+Node: Gawk Distribution1143313
+Node: Getting1143797
+Node: Extracting1144758
+Node: Distribution contents1146396
+Node: Unix Installation1152738
+Node: Quick Installation1153420
+Node: Shell Startup Files1155834
+Node: Additional Configuration Options1156923
+Node: Configuration Philosophy1158912
+Node: Non-Unix Installation1161281
+Node: PC Installation1161741
+Node: PC Binary Installation1162579
+Node: PC Compiling1163014
+Node: PC Using1164131
+Node: Cygwin1167176
+Node: MSYS1167946
+Node: VMS Installation1168447
+Node: VMS Compilation1169238
+Ref: VMS Compilation-Footnote-11170467
+Node: VMS Dynamic Extensions1170525
+Node: VMS Installation Details1172210
+Node: VMS Running1174463
+Node: VMS GNV1178742
+Node: VMS Old Gawk1179477
+Node: Bugs1179948
+Node: Bug address1180611
+Node: Usenet1183008
+Node: Maintainers1183785
+Node: Other Versions1185161
+Node: Installation summary1191745
+Node: Notes1192780
+Node: Compatibility Mode1193645
+Node: Additions1194427
+Node: Accessing The Source1195352
+Node: Adding Code1196787
+Node: New Ports1203005
+Node: Derived Files1207493
+Ref: Derived Files-Footnote-11212978
+Ref: Derived Files-Footnote-21213013
+Ref: Derived Files-Footnote-31213611
+Node: Future Extensions1213725
+Node: Implementation Limitations1214383
+Node: Extension Design1215566
+Node: Old Extension Problems1216720
+Ref: Old Extension Problems-Footnote-11218238
+Node: Extension New Mechanism Goals1218295
+Ref: Extension New Mechanism Goals-Footnote-11221659
+Node: Extension Other Design Decisions1221848
+Node: Extension Future Growth1223961
+Node: Old Extension Mechanism1224797
+Node: Notes summary1226560
+Node: Basic Concepts1227742
+Node: Basic High Level1228423
+Ref: figure-general-flow1228705
+Ref: figure-process-flow1229390
+Ref: Basic High Level-Footnote-11232691
+Node: Basic Data Typing1232876
+Node: Glossary1236204
+Node: Copying1268151
+Node: GNU Free Documentation License1305690
+Node: Index1330808

End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 6dd00c5f..87e46a5e 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -64,7 +64,7 @@
@c applies to and all the info about who's publishing this edition
@c These apply across the board.
-@set UPDATE-MONTH January, 2017
+@set UPDATE-MONTH May, 2017
@set VERSION 4.1
@set PATCHLEVEL 4
@@ -908,6 +908,7 @@ particular records in a file and perform operations upon them.
* Setting the rounding mode:: How to set the rounding mode.
* Arbitrary Precision Integers:: Arbitrary Precision Integer Arithmetic
with @command{gawk}.
+* Checking for MPFR:: How to check if MPFR is available.
* POSIX Floating Point Problems:: Standards Versus Existing Practice.
* Floating point summary:: Summary of floating point discussion.
* Extension Intro:: What is an extension.
@@ -4988,7 +4989,7 @@ the name by which @command{gawk} was invoked. Here is an example of how this
feature may be used:
@example
-awk '
+gawk '
BEGIN @{
for (i = 0; i < length(PROCINFO["argv"]); i++)
print i, PROCINFO["argv"][i]
@@ -31226,6 +31227,7 @@ this is the place to be.
* FP Math Caution:: Things to know.
* Arbitrary Precision Integers:: Arbitrary Precision Integer Arithmetic with
@command{gawk}.
+* Checking for MPFR:: How to check if MPFR is available.
* POSIX Floating Point Problems:: Standards Versus Existing Practice.
* Floating point summary:: Summary of floating point discussion.
@end menu
@@ -32133,6 +32135,58 @@ word sizes. See
@end quotation
@end ifset
+@node Checking for MPFR
+@section How To Check If MPFR Is Available
+
+@cindex MPFR, checking availability of
+@cindex checking for MPFR
+Occasionally, you might like to be able to check if @command{gawk}
+was invoked with the @option{-M} option, enabling aribtrary-precision
+arithmetic. You can do so with the following function, contributed
+by Andrew Schorr:
+
+@example
+@c file eg/lib/have_mpfr.awk
+# adequate_math_precision --- return true if we have enough bits
+@c endfile
+@ignore
+@c file eg/lib/have_mpfr.awk
+#
+# Andrew Schorr, aschorr@@telemetry-investments.com, Public Domain
+# May 2017
+@c endfile
+@end ignore
+@c file eg/lib/have_mpfr.awk
+
+function adequate_math_precision(n)
+@{
+ return (1 != (1+(1/(2^(n-1)))))
+@}
+@c endfile
+@end example
+
+Here is code that invokes the function in order to check
+if arbitrary-precision arithmetic is available:
+
+@example
+BEGIN @{
+ # How many bits of mantissa precision are required
+ # for this program to function properly?
+ fpbits = 123
+
+ # We hope that we were invoked with MPFR enabled. If so, the
+ # following statement should configure calculations to our desired
+ # precision.
+ PREC = fpbits
+
+ if (! adequate_math_precision(fpbits)) @{
+ print("Error: insufficient computation precision available.\n" \
+ "Try again with the -M argument?") > "/dev/stderr"
+ exit 1
+ @}
+@}
+@end example
+
@node POSIX Floating Point Problems
@section Standards Versus Existing Practice
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index b913ab56..402caede 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -59,7 +59,7 @@
@c applies to and all the info about who's publishing this edition
@c These apply across the board.
-@set UPDATE-MONTH January, 2017
+@set UPDATE-MONTH May, 2017
@set VERSION 4.1
@set PATCHLEVEL 4
@@ -903,6 +903,7 @@ particular records in a file and perform operations upon them.
* Setting the rounding mode:: How to set the rounding mode.
* Arbitrary Precision Integers:: Arbitrary Precision Integer Arithmetic
with @command{gawk}.
+* Checking for MPFR:: How to check if MPFR is available.
* POSIX Floating Point Problems:: Standards Versus Existing Practice.
* Floating point summary:: Summary of floating point discussion.
* Extension Intro:: What is an extension.
@@ -4899,7 +4900,7 @@ the name by which @command{gawk} was invoked. Here is an example of how this
feature may be used:
@example
-awk '
+gawk '
BEGIN @{
for (i = 0; i < length(PROCINFO["argv"]); i++)
print i, PROCINFO["argv"][i]
@@ -30240,6 +30241,7 @@ this is the place to be.
* FP Math Caution:: Things to know.
* Arbitrary Precision Integers:: Arbitrary Precision Integer Arithmetic with
@command{gawk}.
+* Checking for MPFR:: How to check if MPFR is available.
* POSIX Floating Point Problems:: Standards Versus Existing Practice.
* Floating point summary:: Summary of floating point discussion.
@end menu
@@ -31147,6 +31149,58 @@ word sizes. See
@end quotation
@end ifset
+@node Checking for MPFR
+@section How To Check If MPFR Is Available
+
+@cindex MPFR, checking availability of
+@cindex checking for MPFR
+Occasionally, you might like to be able to check if @command{gawk}
+was invoked with the @option{-M} option, enabling aribtrary-precision
+arithmetic. You can do so with the following function, contributed
+by Andrew Schorr:
+
+@example
+@c file eg/lib/have_mpfr.awk
+# adequate_math_precision --- return true if we have enough bits
+@c endfile
+@ignore
+@c file eg/lib/have_mpfr.awk
+#
+# Andrew Schorr, aschorr@@telemetry-investments.com, Public Domain
+# May 2017
+@c endfile
+@end ignore
+@c file eg/lib/have_mpfr.awk
+
+function adequate_math_precision(n)
+@{
+ return (1 != (1+(1/(2^(n-1)))))
+@}
+@c endfile
+@end example
+
+Here is code that invokes the function in order to check
+if arbitrary-precision arithmetic is available:
+
+@example
+BEGIN @{
+ # How many bits of mantissa precision are required
+ # for this program to function properly?
+ fpbits = 123
+
+ # We hope that we were invoked with MPFR enabled. If so, the
+ # following statement should configure calculations to our desired
+ # precision.
+ PREC = fpbits
+
+ if (! adequate_math_precision(fpbits)) @{
+ print("Error: insufficient computation precision available.\n" \
+ "Try again with the -M argument?") > "/dev/stderr"
+ exit 1
+ @}
+@}
+@end example
+
@node POSIX Floating Point Problems
@section Standards Versus Existing Practice