* manual/contrib.texi (Contributors): Fix cross reference.
* manual/libc.texinfo (Copying): Include freemanuals.
* manual/Makefile (appendices): Add freemanuals.
* manual/freemanuals.texi: New file.
Patch by Brian Youmans <3diff@gnu.org>.
* manual/libm-err-tab.pl: Pretty print more platforms, print a
smaller table.
* manual/math.texi (Errors in Math Functions): Fix grammar, start
table on separate page.
Patch by Brian Youmans <3diff@gnu.org>.
resource setjmp signal startup process job nss \
users sysinfo conf crypt debug)
add-chapters = $(wildcard $(foreach d, $(add-ons), ../$d/$d.texi))
-appendices = lang.texi header.texi install.texi maint.texi contrib.texi
+appendices = lang.texi header.texi install.texi maint.texi contrib.texi \
+ freemanuals.texi
-include texis
texis: texis.awk $(chapters) $(add-chapters) $(appendices) lesser.texi fdl.texi
-@node Contributors, Copying, Maintenance, Top
+@node Contributors, Free Manuals, Maintenance, Top
@c %MENU% Who wrote what parts of the GNU C library
@appendix Contributors to the GNU C Library
--- /dev/null
+@appendix Free Software Needs Free Documentation
+@cindex free documentation
+
+The biggest deficiency in the free software community today is not in
+the software---it is the lack of good free documentation that we can
+include with the free software. Many of our most important
+programs do not come with free reference manuals and free introductory
+texts. Documentation is an essential part of any software package;
+when an important free software package does not come with a free
+manual and a free tutorial, that is a major gap. We have many such
+gaps today.
+
+Consider Perl, for instance. The tutorial manuals that people
+normally use are non-free. How did this come about? Because the
+authors of those manuals published them with restrictive terms---no
+copying, no modification, source files not available---which exclude
+them from the free software world.
+
+That wasn't the first time this sort of thing happened, and it was far
+from the last. Many times we have heard a GNU user eagerly describe a
+manual that he is writing, his intended contribution to the community,
+only to learn that he had ruined everything by signing a publication
+contract to make it non-free.
+
+Free documentation, like free software, is a matter of freedom, not
+price. The problem with the non-free manual is not that publishers
+charge a price for printed copies---that in itself is fine. (The Free
+Software Foundation sells printed copies of manuals, too.) The
+problem is the restrictions on the use of the manual. Free manuals
+are available in source code form, and give you permission to copy and
+modify. Non-free manuals do not allow this.
+
+The criteria of freedom for a free manual are roughly the same as for
+free software. Redistribution (including the normal kinds of
+commercial redistribution) must be permitted, so that the manual can
+accompany every copy of the program, both on-line and on paper.
+
+Permission for modification of the technical content is crucial too.
+When people modify the software, adding or changing features, if they
+are conscientious they will change the manual too---so they can
+provide accurate and clear documentation for the modified program. A
+manual that leaves you no choice but to write a new manual to document
+a changed version of the program is not really available to our
+community.
+
+Some kinds of limits on the way modification is handled are
+acceptable. For example, requirements to preserve the original
+author's copyright notice, the distribution terms, or the list of
+authors, are ok. It is also no problem to require modified versions
+to include notice that they were modified. Even entire sections that
+may not be deleted or changed are acceptable, as long as they deal
+with nontechnical topics (like this one). These kinds of restrictions
+are acceptable because they don't obstruct the community's normal use
+of the manual.
+
+However, it must be possible to modify all the @emph{technical}
+content of the manual, and then distribute the result in all the usual
+media, through all the usual channels. Otherwise, the restrictions
+obstruct the use of the manual, it is not free, and we need another
+manual to replace it.
+
+Please spread the word about this issue. Our community continues to
+lose manuals to proprietary publishing. If we spread the word that
+free software needs free reference manuals and free tutorials, perhaps
+the next person who wants to contribute by writing documentation will
+realize, before it is too late, that only free manuals contribute to
+the free software community.
+
+If you are writing documentation, please insist on publishing it under
+the GNU Free Documentation License or another free documentation
+license. Remember that this decision requires your approval---you
+don't have to let the publisher decide. Some commercial publishers
+will use a free license if you insist, but they will not propose the
+option; it is up to you to raise the issue and say firmly that this is
+what you want. If the publisher you are dealing with refuses, please
+try other publishers. If you're not sure whether a proposed license
+is free, write to @email{licensing@@gnu.org}.
+
+You can encourage commercial publishers to sell more free, copylefted
+manuals and tutorials by buying them, and particularly by buying
+copies from the publishers that paid for their writing or for major
+improvements. Meanwhile, try to avoid buying non-free documentation
+at all. Check the distribution terms of a manual before you buy it,
+and insist that whoever seeks your business must respect your freedom.
+Check the history of the book, and try reward the publishers that have
+paid or pay the authors to work on it.
+
+The Free Software Foundation maintains a list of free documentation
+published by other publishers, at
+@url{http://www.fsf.org/doc/other-free-books.html}.
!/^\*/ { print; }
' smenu.$$
cat <<EOF
+* Free Manuals:: Free Software Needs Free Documentation.
* Copying:: The GNU Lesser General Public License says
how you can copy and share the GNU C Library.
* Documentation License:: This manual is under the GNU Free
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
any later version published by the Free Software Foundation; with the
-Invariant Sections being "GNU Lesser General Public License", the
-Front-Cover texts being (a) (see below), and with the Back-Cover Texts
-being (b) (see below). A copy of the license is included in the section
-entitled "GNU Free Documentation License".
+Invariant Sections being "Free Software Needs Free Documentation" and
+"GNU Lesser General Public License", the Front-Cover texts being (a)
+(see below), and with the Back-Cover Texts being (b) (see below). A
+copy of the license is included in the section entitled "GNU Free
+Documentation License".
+
(a) The FSF's Front-Cover Text is:
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
any later version published by the Free Software Foundation; with the
-Invariant Sections being "GNU Lesser General Public License", the
-Front-Cover texts being (a) (see below), and with the Back-Cover Texts
-being (b) (see below). A copy of the license is included in the section
-entitled "GNU Free Documentation License".
+Invariant Sections being "Free Software Needs Free Documentation" and
+"GNU Lesser General Public License", the Front-Cover texts being (a)
+(see below), and with the Back-Cover Texts being (b) (see below). A
+copy of the license is included in the section entitled "GNU Free
+Documentation License".
(a) The FSF's Front-Cover Text is:
@include top-menu.texi
@include chapters.texi
+@node Free Manuals, Copying, Contributors, Top
+@include freemanuals.texi
+
@set lgpl-appendix
-@node Copying, Documentation License, Contributors, Top
+@node Copying, Documentation License, Free Manuals, Top
@include lesser.texi
@node Documentation License, Concept Index, Copying, Top
%pplatforms =
( "i386/fpu" => "ix86",
"generic" => "Generic",
- "alpha" => "Alpha"
+ "alpha/fpu" => "Alpha",
+ "ia64/fpu" => "IA64",
+ "m68k/fpu" => "M68k",
+ "mips/fpu" => "MIPS",
+ "powerpc/fpu" => "PowerPC",
+ "sparc/sparc32/fpu" => "Sparc 32-bit",
+ "sparc/sparc64/fpu" => "Sparc 64-bit",
+ "sh/sh4/fpu" => "SH4",
+ "s390/fpu" => "S/390",
+ "arm" => "ARM"
);
-@all_functions =
+@all_functions =
( "acos", "acosh", "asin", "asinh", "atan", "atanh",
"atan2", "cabs", "cacos", "cacosh", "carg", "casin", "casinh",
"catan", "catanh", "cbrt", "ccos", "ccosh", "ceil", "cexp", "cimag",
find (\&find_files, $sources);
+@platforms = sort by_platforms @platforms;
+
&print_all;
sub find_files {
} elsif ($eps eq "0") {
# ignore
next;
- } elsif (!exists $results{$test}{$platform}{$type}{$float}
+ } elsif (!exists $results{$test}{$platform}{$type}{$float}
|| $results{$test}{$platform}{$type}{$float} ne 'fail') {
$results{$test}{$platform}{$type}{$float} = $eps;
}
sub get_value {
my ($fct, $platform, $type, $float) = @_;
- return (exists $results{$fct}{$platform}{$type}{$float}
+ return (exists $results{$fct}{$platform}{$type}{$float}
? $results{$fct}{$platform}{$type}{$float} : "0");
}
return exists $pplatforms{$platform} ? $pplatforms{$platform} : $platform;
}
-sub print_all {
- my ($fct, $platform, $float, $first, $i);
+sub print_platforms {
+ my (@p) = @_;
+ my ($fct, $platform, $float, $first, $i, $platform_no, $platform_total);
print '@multitable {nexttowardf} ';
- foreach (@platforms) {
+ foreach (@p) {
print ' {1000 + i 1000}';
}
print "\n";
print '@item Function ';
- foreach (@platforms) {
+ foreach (@p) {
print ' @tab ';
print &canonicalize_platform ($_);
}
print "\n";
-
+
foreach $fct (@all_functions) {
foreach $float (@all_floats) {
print "\@item $fct$suffices{$float} ";
- foreach $platform (@platforms) {
+ foreach $platform (@p) {
print ' @tab ';
if (exists $results{$fct}{$platform}{'normal'}{$float}
|| exists $results{$fct}{$platform}{'real'}{$float}
print "\@end multitable\n";
}
+
+sub print_all {
+ my ($i, $max);
+
+ my ($columns) = 5;
+
+ # Print only 5 platforms at a time.
+ for ($i=0; $i < $#platforms; $i+=$columns) {
+ $max = $i+$columns-1 > $#platforms ? $#platforms : $i+$columns-1;
+ print_platforms (@platforms[$i .. $max]);
+ }
+}
+
+sub by_platforms {
+ my ($pa, $pb);
+
+ $pa = $pplatforms{$a} ? $pplatforms{$a} : $a;
+ $pb = $pplatforms{$b} ? $pplatforms{$b} : $b;
+
+ return $pa cmp $pb;
+}
functions is always less than 0.5ulps. Using rounding bits this is also
possible and normally implemented for the basic operations. To achieve
the same for the complex math functions requires a lot more work and
-this was not spend so far.
+this has not yet been done.
Therefore many of the functions in the math library have errors. The
table lists the maximum error for each function which is exposed by one
-of the existing tests in the test suite. It is tried to cover as much
-as possible and really list the maximum error (or at least a ballpark
+of the existing tests in the test suite. The table tries to cover as much
+as possible and list the actual maximum error (or at least a ballpark
figure) but this is often not achieved due to the large search space.
The table lists the ULP values for different architectures. Different
floating-point operations varies and also the existing hardware support
is different.
+@page
+@c This multitable does not fit on a single page
@include libm-err.texi
@node Pseudo-Random Numbers