mirror of
https://github.com/lcn2/calc.git
synced 2025-08-19 01:13:27 +03:00
Compare commits
38 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
aeb9a9d473 | ||
|
66883b390d | ||
|
ea533659ce | ||
|
9e81971f25 | ||
|
cbbd866535 | ||
|
bf23f82c29 | ||
|
ec5c584785 | ||
|
6bbb8c0e42 | ||
|
438554b0ed | ||
|
61ba4bc5c8 | ||
|
0145883396 | ||
|
f91bfaab70 | ||
|
36ab4fdc1b | ||
|
1cd89398ad | ||
|
bd3a381783 | ||
|
618f42c960 | ||
|
1363b58060 | ||
|
2c659f40ff | ||
|
4c243a69fe | ||
|
f80eee7a09 | ||
|
a044b9325b | ||
|
c028ea478f | ||
|
62bdba6d22 | ||
|
4d9511243c | ||
|
188fd372ea | ||
|
44ffb0eec9 | ||
|
beb13bf89f | ||
|
a31078bbec | ||
|
7ae4f4009c | ||
|
40fc854006 | ||
|
8dd7a3cd2a | ||
|
2726ae9d23 | ||
|
d25186fc52 | ||
|
28d1e35362 | ||
|
1ae2f953d3 | ||
|
ed4b56d1ec | ||
|
cc2f6f7b85 | ||
|
57a22a6f39 |
100
.gitignore
vendored
Normal file
100
.gitignore
vendored
Normal file
@@ -0,0 +1,100 @@
|
||||
# files and directories created during the building of calc and other Makefile actions
|
||||
#
|
||||
# NOTE: While many of these might be part of a released calc tarball, they are
|
||||
# not consider development source. Some other file(s) and/or programs
|
||||
# generate these files.
|
||||
#
|
||||
.dynamic
|
||||
.hsrc
|
||||
Makefile.simple
|
||||
NOTES
|
||||
align32.h
|
||||
args.h
|
||||
cal/.all
|
||||
calc
|
||||
calc.1
|
||||
calc.usage
|
||||
calcerr.c
|
||||
calcerr.h
|
||||
conf.h
|
||||
cscript/.all
|
||||
cscript/4dsphere
|
||||
cscript/README
|
||||
cscript/fproduct
|
||||
cscript/mersenne
|
||||
cscript/piforever
|
||||
cscript/plus
|
||||
cscript/powerterm
|
||||
cscript/simple
|
||||
cscript/square
|
||||
custom/.all
|
||||
custom/Makefile.simple
|
||||
custom/libcustcalc*
|
||||
endian
|
||||
endian_calc.h
|
||||
fposval.h
|
||||
have_const.h
|
||||
have_fpos.h
|
||||
have_fpos_pos.h
|
||||
have_getpgid.h
|
||||
have_getprid.h
|
||||
have_getsid.h
|
||||
have_gettime.h
|
||||
have_memmv.h
|
||||
have_newstr.h
|
||||
have_offscl.h
|
||||
have_posscl.h
|
||||
have_rusage.h
|
||||
have_stdlib.h
|
||||
have_stdvs
|
||||
have_strdup.h
|
||||
have_string.h
|
||||
have_times.h
|
||||
have_uid_t.h
|
||||
have_unistd.h
|
||||
have_unused.h
|
||||
have_urandom.h
|
||||
have_ustat.h
|
||||
help/.all
|
||||
help/COPYING
|
||||
help/COPYING-LGPL
|
||||
help/binding
|
||||
help/bindings
|
||||
help/bug
|
||||
help/bugs
|
||||
help/builtin
|
||||
help/change
|
||||
help/changes
|
||||
help/copy
|
||||
help/cscript
|
||||
help/custom_cal
|
||||
help/errorcode
|
||||
help/errorcodes
|
||||
help/full
|
||||
help/funclist
|
||||
help/funclist.c
|
||||
help/libcalc
|
||||
help/man
|
||||
help/new_custom
|
||||
help/resource
|
||||
help/type
|
||||
help/usage
|
||||
libcalc*
|
||||
libcustcalc*
|
||||
longbits
|
||||
longbits.h
|
||||
sample_many
|
||||
sample_rand
|
||||
terminal.h
|
||||
ver_calc
|
||||
|
||||
# other commonly excluded patterns
|
||||
#
|
||||
*~
|
||||
*.BAK
|
||||
core*
|
||||
.DS_Store
|
||||
*.dSYM/
|
||||
*.[oa]
|
||||
.*.swp
|
||||
*,v
|
65
BUGS
65
BUGS
@@ -32,16 +32,25 @@ If you have tried all of the above and things still are not right,
|
||||
then it may be time to send in a bug report. You can send bug
|
||||
and bug fixes reports to:
|
||||
|
||||
calc-bugs at asthe dot com
|
||||
calc-bug-report at asthe dot com
|
||||
|
||||
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||
[[ NOTE: The EMail address uses 'asthe', the web site URL uses 'isthe' ]]
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
|
||||
Your subject must contain the words:
|
||||
This replaces the old calc-bugs at asthe dot com address.
|
||||
|
||||
calc bug report
|
||||
To be sure we see your EMail reporting a calc bug, please use the
|
||||
following phase in your EMail Subject line:
|
||||
|
||||
You may have additional words in your subject line.
|
||||
calc bug report
|
||||
|
||||
That phrase in your subject line will help ensure your request
|
||||
will get past our anti-spam filters. You may have additional
|
||||
words in your subject line.
|
||||
|
||||
However, you may find it more helpful to simply subscribe
|
||||
to the calc-tester mailing list (see below) and then to
|
||||
send your report to that mailing list as a wider set calc
|
||||
testers may be able to help you.
|
||||
|
||||
When you send your report, please include the following information:
|
||||
|
||||
@@ -68,20 +77,15 @@ of a context diff patch).
|
||||
|
||||
Known bugs:
|
||||
|
||||
The output of the alg_config.cal resource file is bogus.
|
||||
We would welcome a replacement for this code.
|
||||
|
||||
We are sure some more bugs exist. When you find them, please let
|
||||
us know! See the above for details on how to report and were to
|
||||
EMail your bug reports and hopefully patches to fix them.
|
||||
|
||||
=-=
|
||||
|
||||
Problems that have known work-a-rounds:
|
||||
|
||||
* There is a bug in gcc v4.1.0 that causes calc to fail the regression
|
||||
test. The work-a-round is to compile with gcc v4.1.1 or later. This
|
||||
problems was observed on Fedora 5.
|
||||
|
||||
=-=
|
||||
|
||||
mis-features in calc:
|
||||
|
||||
Some problems are not bugs but rather mis-features / things that could
|
||||
@@ -129,7 +133,34 @@ mis-features in calc:
|
||||
|
||||
will not.
|
||||
|
||||
## Copyright (C) 1999-2013 Landon Curt Noll
|
||||
=-=
|
||||
|
||||
To subscribe to the calc-tester mailing list, visit the following URL:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-tester.html
|
||||
|
||||
This is a low volume moderated mailing list.
|
||||
|
||||
This mailing list replaces calc-tester at asthe dot com list.
|
||||
|
||||
If you need a human to help you with your mailing list subscription,
|
||||
please send EMail to our special:
|
||||
|
||||
calc-tester-maillist-help at asthe dot com
|
||||
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
|
||||
address. To be sure we see your EMail asking for help with your
|
||||
mailing list subscription, please use the following phase in your
|
||||
EMail Subject line:
|
||||
|
||||
calc tester mailing list help
|
||||
|
||||
That phrase in your subject line will help ensure your
|
||||
request will get past our anti-spam filters. You may have
|
||||
additional words in your subject line.
|
||||
|
||||
## Copyright (C) 1999-2014 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -145,10 +176,6 @@ mis-features in calc:
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
##
|
||||
## @(#) $Revision: 30.2 $
|
||||
## @(#) $Id: BUGS,v 30.2 2013/08/11 01:09:27 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/bin/calc/RCS/BUGS,v $
|
||||
##
|
||||
## Under source code control: 1994/03/18 14:06:13
|
||||
## File existed as early as: 1994
|
||||
##
|
||||
|
455
CHANGES
455
CHANGES
@@ -1,7 +1,346 @@
|
||||
The following are the changes from calc version 2.12.4.11 to date:
|
||||
The following are the changes from calc version 2.12.6.1 to date:
|
||||
|
||||
Improved gen_v1(h,n) in lucas.cal to use an even faster search method.
|
||||
|
||||
Improved are checking in lucas.cal. In particular both h and n must be
|
||||
integers >= 1. In the case of both rodseth_xhn(x, h, n) and gen_v1(h, n)
|
||||
h must be odd.
|
||||
|
||||
Fixed an C code indenting issue that was reported by Thomas Walter
|
||||
<th dot walter42 at gmx dot de> in zfunc.c.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.12.6.0 to 2.12.6.0:
|
||||
|
||||
Added the makefile variable ${COMMON_ADD} that will add flags
|
||||
to all compile and link commands. The ${COMMON_ADD} flags are
|
||||
appended to both ${COMMON_CFLAGS} and ${COMMON_LDFLAGS}. This
|
||||
facility is available to nearly all platforms except those with
|
||||
very old make commands that do not understand the += operator.
|
||||
|
||||
Example on macOS (Darwin), one may invoke clang's -fsanitize
|
||||
facility by:
|
||||
|
||||
make clobber all \
|
||||
COMMON_ADD='-fsanitize=undefined -fsanitize=address'
|
||||
|
||||
Another example. To force C warnings to be treated as errors:
|
||||
|
||||
make COMMON_ADD='-Werror'
|
||||
|
||||
Created a GitHub repository for calc:
|
||||
|
||||
https://github.com/lcn2/calc
|
||||
|
||||
NOTE: The calc GitHub repository represents the an active
|
||||
development stream. While an effort will be made to keep
|
||||
the master branch of the calc GitHub repository in working
|
||||
order, that tree may be unstable. Those wishing for more
|
||||
reliable releases use releases found at calc mirror sites:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-mirror.html
|
||||
|
||||
IMPORTANT NOTE:
|
||||
|
||||
On 2017 June 05, the calc GitHub history was re-written.
|
||||
Anyone who was tracking the calc "pre-release" on GitHub prior
|
||||
to version 2.12.6.0 should do a:
|
||||
|
||||
git reset --hard origin/master
|
||||
git cleanup -f
|
||||
|
||||
Or you may just want to start over:
|
||||
|
||||
rm -rf calc
|
||||
git clone https://github.com/lcn2/calc.git
|
||||
|
||||
Sorry about that. The previous GitHub repository was an useful
|
||||
experiment. Based on what we learned, we decided to rebuild it.
|
||||
|
||||
Renamed README to README.FIRST. Added README.md for the
|
||||
GitHub repository.
|
||||
|
||||
Fixed reading from standard input (stdin) when -p is given on
|
||||
the command line. This now prints hello:
|
||||
|
||||
echo hello | calc -p 'stdin = files(0); print fgetline(stdin);'
|
||||
|
||||
Added more debugging related to stdin when bit 4 of calc_debug
|
||||
is set (e.g., running calc with -D16).
|
||||
|
||||
Updated the calc(1) man page and 'help file' to explain about
|
||||
reading from standard input (stdin).
|
||||
|
||||
Added some clarifying remarks for 'help ptest' explaining that
|
||||
the ptest builtin can return 1 is some cases where the test
|
||||
value is a pseudoprime.
|
||||
|
||||
Removed duplicate copyright comments from the help/builtin that
|
||||
is built.
|
||||
|
||||
Fixed a number of typos in the CHANGES file.
|
||||
|
||||
The following are the changes from calc version 2.12.5.4 to 2.12.5.6:
|
||||
|
||||
Recompile to match current RHEL7.2 libc and friends.
|
||||
|
||||
Added fix by Alexandre Fedotov <fedotov at mail dot desy dot de>
|
||||
to prepend ${T} in front of the CALCPATH path components
|
||||
${CALC_SHAREDIR} and ${CUSTOMDIR}. Add ${T} in front of ${HELPDIR}
|
||||
and ${CUSTONHELPDIR} when making conf.h.
|
||||
|
||||
Improved the jacobi help page.
|
||||
|
||||
Rewrote gen_v1() in the lucas.cal resource file using the method
|
||||
based on a paper:
|
||||
|
||||
"A note on primality tests for N = h*2^n-1", by Oystein J. Rodseth,
|
||||
Department of Mathematics, University of Bergen, BIT Numerical
|
||||
Mathematics. 34 (3): pp 451-454.
|
||||
|
||||
http://folk.uib.no/nmaoy/papers/luc.pdf
|
||||
|
||||
The improved gen_v1() function is capable of returning a value
|
||||
for all valid values of h and n. As a result, the trial tables
|
||||
used by gen_v1() have been changed to a short list of values
|
||||
to try, in order ot likelyhood of success, before doing an
|
||||
exhaustive search for a v1 value to return.
|
||||
|
||||
Removed lucas_tbl.cal calc resource file. This file was made
|
||||
obsolete by the above rewrite of the lucas.cal resource file.
|
||||
This file will be removed from the local cal directory and
|
||||
from CALC_SHAREDIR during a 'make install', 'make clobber',
|
||||
and 'make uninstall'.
|
||||
|
||||
Renamed gen_u0() to gen_u2() in lucas.cal. Provided a gen_u0()
|
||||
stub function that calls gen_u2() for backward compatibility.
|
||||
|
||||
The old gen_v1() method used by the Amdahl 6 group has been
|
||||
renamed legacy_gen_v1() in lucas.cal. This function is no
|
||||
longer used by the lucas(h, n) function to test the primality of
|
||||
h*2^n-1. It is preserved in lucas.cal for historical purposes.
|
||||
|
||||
The 'make clobber' rule will attempt to remove all files that
|
||||
start with libcalc and start with libcustcalc.
|
||||
|
||||
The 'man' command is now an alias for the 'help' command.
|
||||
|
||||
Fixed extra /'s that were put into CALCPATH because of ${T}.
|
||||
Fixed extra /'s that were compiled into HELPDIR and CUSTOMHELPDIR.
|
||||
|
||||
The fix in 2.12.5.4 to to prepend ${T} in front of the CALCPATH
|
||||
path components ${CALC_SHAREDIR} and ${CUSTOMDIR} broke the
|
||||
calc rpm build process. The check-buildroot tool discovered
|
||||
that the BUILDROOT directory had been improperly put into various
|
||||
paths and binaries. This has been fixed in 2.12.5.5.
|
||||
|
||||
Fixed a crash that showed up on macOS (Darwin) that was reported
|
||||
by Richard Outerbridge <outer at interlog dot com> and
|
||||
fixed by Stuart Henderson <stu at spacehopper dot org>.
|
||||
Thanks goes to both!
|
||||
|
||||
|
||||
The following are the changes from calc version 2.12.5.3 to 2.12.5.3:
|
||||
|
||||
Calc version 2.12.5.2 for macOS (Darwin) users, code to installed
|
||||
calc under /opt/calc. Moreover the CHANGES file did not mention
|
||||
/opt/calc. Sorry about that!.
|
||||
|
||||
A much better tree for macOS (Darwin) users would have been
|
||||
to install cal under /opt/calc. This release ONLY changes the
|
||||
macOS (Darwin) install tree to /usr/local.
|
||||
|
||||
macOS (Darwin) users who installed calc version 2.12.5.2
|
||||
should, after installing version 2.12.5.3:
|
||||
|
||||
rm -rf /opt/calc
|
||||
|
||||
|
||||
The following are the changes from calc version 2.12.5.1 to 2.12.5.2:
|
||||
|
||||
NOTE: calc version 2.12.5.2, for macOS (Darwin) users,
|
||||
installed under /opt/calc. We neglected to mention this
|
||||
AND /usr/local would have been a better choice. Sorry!
|
||||
Fixed in calc version 2.12.5.3.
|
||||
|
||||
Removed rules and makefile variables associated with shortened
|
||||
calc version numbers of less than 4 levels.
|
||||
|
||||
Under OS X (Darwin), if /usr/include is missing, warnings
|
||||
are issued to help the user use xcode-select --install
|
||||
so that one may properly compile C code.
|
||||
|
||||
Lowered REDC levels:
|
||||
|
||||
#define MAXREDC 256 /* number of entries in REDC cache */
|
||||
|
||||
#define SQ_ALG2 28 /* size for alternative squaring */
|
||||
config("sq2") == 28 /* was 3388 */
|
||||
#define MUL_ALG2 28 /* size for alternative multiply */
|
||||
config("mul2") == 28 /* was 1780 */
|
||||
#define POW_ALG2 20 /* size for using REDC for powers */
|
||||
config("pow2") == 20 /* was 176 */
|
||||
#define REDC_ALG2 25 /* size for using alternative REDC */
|
||||
config("redc2") == 25 /* was 220 */
|
||||
|
||||
The alg_config.cal script appears to be not correctly finding the
|
||||
best REDC values. While it has been improved, alg_config.cal still
|
||||
seems to be suspect on how it attempts to find the best values.
|
||||
|
||||
Fixed an intro help file mistake found by Roger Hardiman
|
||||
<roger at rjh dot org dot uk>.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.12.5.0 to 2.12.5.1:
|
||||
|
||||
Calc has a new calc-tester mailing list. This list is for those
|
||||
who are using/testing calc. We also use this list to announce
|
||||
new versions of calc. To subscribe to the calc-tester mailing
|
||||
list, visit the following URL:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-tester.html
|
||||
|
||||
This is a low volume moderated mailing list.
|
||||
|
||||
This mailing list replaces calc-tester at asthe dot com list.
|
||||
|
||||
If you need a human to help you with your mailing list subscription,
|
||||
please send Email to our special:
|
||||
|
||||
calc-tester-maillist-help at asthe dot com
|
||||
|
||||
address. To be sure we see your Email asking for help with your
|
||||
mailing list subscription, please use the following phase in your
|
||||
Email Subject line:
|
||||
|
||||
calc tester mailing list help
|
||||
|
||||
That phrase in your subject line will help ensure your
|
||||
request will get past our anti-spam filters. You may have
|
||||
additional words in your subject line.
|
||||
|
||||
There is a new calc bug report Email address:
|
||||
|
||||
calc-bug-report at asthe dot com
|
||||
|
||||
This replaces the old calc-bugs at asthe dot com address.
|
||||
|
||||
To be sure we see your Email reporting a calc bug, please use the
|
||||
following phase in your Email Subject line:
|
||||
|
||||
calc bug report
|
||||
|
||||
That phrase in your subject line will help ensure your
|
||||
request will get past our anti-spam filters. You may have
|
||||
additional words in your subject line.
|
||||
|
||||
However, you may find it more helpful to simply subscribe
|
||||
to the calc-tester mailing list (see above) and then to
|
||||
send your report to that mailing list as a wider set calc
|
||||
testers may be able to help you.
|
||||
|
||||
The following makefile rules that were related to printing the
|
||||
upper values of the calc version, rules that were made obsolete
|
||||
in calc version 2.12.4.14, have been removed:
|
||||
|
||||
calc_vers calc_ver calc_ve
|
||||
vers ver ve
|
||||
|
||||
Noted that the hash() builtin function, internally known as
|
||||
quickhash (used for internal objects such as the associative
|
||||
arrays as well as other internal processes) uses the deprecated
|
||||
32-bit FNV-0 hash. The use of this deprecated hash is sufficient
|
||||
for calc internal purposes. Use of FNV-1a is recommended for
|
||||
a general non-cryptographic quick hash.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.12.4.14 to 2.12.5.0:
|
||||
|
||||
For Apple OS X / Darwin target:
|
||||
|
||||
MACOSX_DEPLOYMENT_TARGET is no longer defined
|
||||
using clang compiler
|
||||
|
||||
By default, -install-name is used when forming shared libs.
|
||||
To force -install-name to not be used, set SET_INSTALL_NAME=no.
|
||||
|
||||
The have_stdvs.c test uses <stdlib.h> and fixed va_start() test call
|
||||
that didn't use last arg.
|
||||
|
||||
Fixed math_fmt (printf) in value.c where a LEN (SB32) be printed as %d.
|
||||
|
||||
Fixed a significant bug where that resulted in an incorrect
|
||||
complex number comparison. Thanks goes to David Binderman
|
||||
<dcb314 at hotmail dot com> for identifying the subtle typo!
|
||||
|
||||
Make minor fixes to the make depend rule.
|
||||
|
||||
Fixed places were calc defined a reserved identifier that
|
||||
begin with either __ or _[A-Z]. For example, __FILE_H__ has
|
||||
been replaced with INCLUDE_FILE_H.
|
||||
|
||||
Fixed the addall3 example in the script help file. Thanks for this
|
||||
fix goes to Igor Furlan <igor dot furlan at gmail dot com>.
|
||||
|
||||
We made important fixes to the calc command line history:
|
||||
|
||||
Fixed a bug in the command line history where calc would sometimes
|
||||
crash. There was code that used memcpy() instead of memmove()
|
||||
that could corrupt the command line history when entering a
|
||||
into into history that was similar to a previous entry. Thanks
|
||||
goes to Einar Lielmanis <einars at spicausis dot lv> for first
|
||||
identifying this mistake.
|
||||
|
||||
The calc command line history code, in general was not robust.
|
||||
We made use a patch from Mathias Buhr <napcode at users dot sf
|
||||
dot net>, that while it uses a bit more memory: is much more
|
||||
flexible, readable and robust. This patch replaced the improper
|
||||
use of memcpy() (see above) with better code. Thanks!
|
||||
|
||||
The alg_config.cal calc resource file has been reworked to produce
|
||||
better diagnostics while attempting to determine the ideal values
|
||||
for mul2, sq2, and pow2. However, it has been shown that this
|
||||
code is not correct. Suggestions for a replacement are welcome!
|
||||
|
||||
calc -u 'read alg_config; config("user_debug", 2),; best_mul2();'
|
||||
calc -u 'read alg_config; config("user_debug", 2),; best_sq2();'
|
||||
calc -u 'read alg_config; config("user_debug", 2),; best_pow2();'
|
||||
|
||||
Fixed a number of pedantic compiler warnings.
|
||||
|
||||
Removed -W and -Wno-comment from the the CCWARN makefile variable.
|
||||
|
||||
Removed no_implicit.arg makefile rule. Removed HAVE_NO_IMPLICIT
|
||||
makefile variable. Removed no_implicit.c source file.
|
||||
|
||||
Added WNO_IMPLICT makefile variable to hold the compiler flag
|
||||
-Wno-implicit for use on selective compile lines.
|
||||
|
||||
Added WNO_ERROR_LONG_LONG makefile variable to hold the compiler flag
|
||||
-Wno-error=long-long for use on selective compile lines.
|
||||
|
||||
Added WNO_LONG_LONG makefile variable to hold the compiler flag
|
||||
-Wno-long-long for use on selective compile lines.
|
||||
|
||||
The makefile variable ${MKDIR_ARG} has been replaced with just -p.
|
||||
|
||||
Minor fixes were made to the calc.spec.in file.
|
||||
|
||||
The target rpm architecture changed from i686 to x86_64. For those
|
||||
who do not run machine with x86_64, we continue to release a src
|
||||
rpm. For those without the ability to process an rpm, we will always
|
||||
to release src tarball.
|
||||
|
||||
When building the libcalc and libcustcalc shared libraries,
|
||||
ONLY the .so and .so.${VERSION} files are created. The .so is
|
||||
a symlink to the .so.${VERSION} file. Here ${VERSION} is the
|
||||
full "w.x.y.z" calc version.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.12.4.11 to 2.12.4.13:
|
||||
|
||||
Fixed many typos in comments of the Makefile thanks to the review
|
||||
work of Michael Somos <somos at harary dot math dot georgetown dot edu>.
|
||||
work of Michael Somos.
|
||||
|
||||
Fixed typo in "help sysinfo".
|
||||
|
||||
@@ -12,9 +351,9 @@ The following are the changes from calc version 2.12.4.11 to date:
|
||||
Christoph Zurnieden <czurnieden at gmx dot de> including:
|
||||
|
||||
infinities.cal - handle infinities symbolically, a little helper file
|
||||
intnum.cal - implementation of tanhsinh- and Gauss-Legendre quadrature
|
||||
intnum.cal - implementation of tanh sinh and Gauss-Legendre quadrature
|
||||
smallfactors.cal - find the factors of a number < 2^32
|
||||
strings.cal - implementation of the macros in ctype.h plus str[n]casecmp
|
||||
strings.cal - implementation of isascii() and isblank()
|
||||
|
||||
Reformatted some calc resource files. Cleanup in comment the headers
|
||||
of some calc resource files.
|
||||
@@ -38,6 +377,8 @@ The following are the changes from calc version 2.12.4.11 to date:
|
||||
isxdigit - whether character a hexadecimal digit
|
||||
strcasecmp - compare two strings, case independent
|
||||
strncasecmp - compare two strings up to n characters, case independent
|
||||
strtolower - transform an ASCII string to lower case
|
||||
strtoupper - transform an ASCII string to upper case
|
||||
|
||||
For details on these new builtins, see their help messages.
|
||||
Thanks goes to Inge Zurnieden <inge dot zurnieden at gmx dot de> for
|
||||
@@ -60,6 +401,21 @@ The following are the changes from calc version 2.12.4.11 to date:
|
||||
|
||||
http://cis.csuohio.edu/~somos/picky.html
|
||||
|
||||
Removed functions from strings.cal that have been replaced by
|
||||
the new ctype-like builtin functions.
|
||||
|
||||
Fixed cal/Makefile to include missing intnum.cal file.
|
||||
|
||||
Added detail_help_list make target to cal/Makefile.
|
||||
|
||||
The detaillist make target in help/Makefile is now
|
||||
called detail_help_list.
|
||||
|
||||
Removed requirement of gen_u0(h, n, v1) in lucas.cal that h
|
||||
be odd. While still lucas(h, n) converts even h into an odd h
|
||||
internally by incrementing n, gen_u0(h, n, v1) will output even
|
||||
when h is even.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.12.4.6 to version 2.12.4.10:
|
||||
|
||||
@@ -71,11 +427,11 @@ The following are the changes from calc version 2.12.4.6 to version 2.12.4.10:
|
||||
Set MACOSX_DEPLOYMENT_TARGET=10.8 as we upgraded all of
|
||||
our development Mac OS X to 10.8.
|
||||
|
||||
Libraries are chmodded as 0644 to allow for building rpms
|
||||
Libraries are chmod-ed as 0644 to allow for building rpms
|
||||
without root.
|
||||
|
||||
Silenced annoying warning about unused variable 'intp'
|
||||
while compiline endian.c under some circumstances.
|
||||
while compiling endian.c under some circumstances.
|
||||
|
||||
Fixed typo in redeclaration warnings. Thanks to
|
||||
Christoph Zurnieden <czurnieden at gmx dot de> for this report.
|
||||
@@ -84,13 +440,13 @@ The following are the changes from calc version 2.12.4.6 to version 2.12.4.10:
|
||||
Christoph Zurnieden <czurnieden at gmx dot de> including:
|
||||
|
||||
bernpoly.cal - Computes the nth Bernoulli polynomial at z for any n,z
|
||||
brentsolve.cal - root-finder implementwed with the Brent-Dekker trick
|
||||
brentsolve.cal - root-finder implemented with the Brent-Dekker trick
|
||||
factorial.cal - product of the positive integers
|
||||
factorial2.cal - variety of integer functions quasi-related to factoral
|
||||
factorial2.cal - variety of integer functions quasi-related to factorial
|
||||
lambertw.cal - Computes Lambert's W-function at "z" at branch "branch"
|
||||
lnseries.cal - Calculates a series of natural logarithms at 1,2,3,4...n
|
||||
specialfunctions.cal - Calculates the value of the beta function
|
||||
statistics.cal - a wide vareity of stastical functions
|
||||
statistics.cal - a wide variety of statistical functions
|
||||
toomcook.cal - Multiply by way of the Toom-Cook algorithm
|
||||
zeta2.cal - Calculate the value of the Hurwitz Zeta function
|
||||
|
||||
@@ -103,7 +459,7 @@ The following are the changes from calc version 2.12.4.6 to version 2.12.4.10:
|
||||
|
||||
We replaced COPYING-LGPL with the version that is found at
|
||||
http://www.gnu.org/licenses/lgpl-2.1.txt because that version
|
||||
contans some whitespace formatting cleanup. Otherwise the
|
||||
contains some whitespace formatting cleanup. Otherwise the
|
||||
license is the same.
|
||||
|
||||
We fixed a number of places where "the the" was used
|
||||
@@ -129,7 +485,7 @@ The following are the changes from calc version 2.12.4.3 to 2.12.4.5:
|
||||
|
||||
Added gvec.cal resource script.
|
||||
|
||||
Added calc-symlink make rule to setup symlinks from stardard locations
|
||||
Added calc-symlink make rule to setup symlinks from standard locations
|
||||
into a tree specified by a non-empty ${T} makefile variable. Added
|
||||
calc-unsymlink to remove any symlinks that may have been created by
|
||||
the calc-symlink rule.
|
||||
@@ -149,7 +505,7 @@ The following are the changes from calc version 2.12.4.0 to 2.12.4.2:
|
||||
Fixed a documentation bug for the sgn() builtin.
|
||||
|
||||
Added the 1<<8/2 evaluation example to "help unexpected". That
|
||||
expression evalutes to 128, not 16 as some C programmers might expect.
|
||||
expression evaluates to 128, not 16 as some C programmers might expect.
|
||||
|
||||
Fixed a bug in solve.cal where high was not returned in some situations.
|
||||
|
||||
@@ -161,7 +517,7 @@ The following are the changes from calc version 2.12.4.0 to 2.12.4.2:
|
||||
|
||||
The Makefile used in the source rpm (calc-*.src.rpm) no longer uses
|
||||
the -Werror compile flag. This is to help those distributions with
|
||||
compilers that make produce (hopefully) complination warnings.
|
||||
compilers that make produce (hopefully) compilation warnings.
|
||||
NOTE: For testing and calc build purposes will recommend and will
|
||||
continue to use the -Werror flag.
|
||||
|
||||
@@ -175,7 +531,7 @@ The following are the changes from calc version 2.12.4.0 to 2.12.4.2:
|
||||
|
||||
one may build a calc binary that is easier to debug.
|
||||
|
||||
Fixed a bug where an certains typos (e.g., calling an unknown
|
||||
Fixed a bug where an certain typos (e.g., calling an unknown
|
||||
function) would previously cause calc to exit.
|
||||
|
||||
Updated the COPYING file to reflect the new filenames associated
|
||||
@@ -196,7 +552,7 @@ The following are the changes from calc version 2.12.4.0 to 2.12.4.2:
|
||||
Added dms.cal and hms.cal resource files. The dms.cal is a more
|
||||
functional version of deg.cal. It is a superset except that increment
|
||||
and decrement is on the arc second level. The hms.cal is for
|
||||
24-hour cycle instread of the 360 degree cycle of dms.cal.
|
||||
24-hour cycle instead of the 360 degree cycle of dms.cal.
|
||||
|
||||
Changed deg.cal object name from dms to deg so that the more functional
|
||||
dms.cal can own the dms object name.
|
||||
@@ -204,7 +560,7 @@ The following are the changes from calc version 2.12.4.0 to 2.12.4.2:
|
||||
Updated 'help obj' to reflect changes to 'show objfunctions' and
|
||||
resource file example list since 1999.
|
||||
|
||||
Fixed problem where CALC_BYTE_ORDER refering to CALC_BIG_ENDIAN
|
||||
Fixed problem where CALC_BYTE_ORDER referring to CALC_BIG_ENDIAN
|
||||
and CALC_LITTLE_ENDIAN instead of BIG_ENDIAN and LITTLE_ENDIAN.
|
||||
|
||||
|
||||
@@ -216,7 +572,7 @@ The following are the changes from calc version 2.12.3.0 to 2.12.3.3:
|
||||
|
||||
Calc versions will always be of the form x.y.z.w even when the
|
||||
MINOR_PATCH (w) is 0. Thus, 2.12.3.0 will be printed as 2.12.3.0
|
||||
instread of just 2.12.3.
|
||||
instead of just 2.12.3.
|
||||
|
||||
Added MINGW32_NT-5.0 compile target based on a patch from
|
||||
Brian L. Angus (angus at eng dot utah dot edu).
|
||||
@@ -230,7 +586,7 @@ The following are the changes from calc version 2.12.3.0 to 2.12.3.3:
|
||||
|
||||
The ${CALC_INCDIR}/custom is no longer being removed at install time
|
||||
if it is empty. Now when ${ALLOW_CUSTOM} make variable is empty,
|
||||
an empty ${CALC_INCDIR}/custom may be left hehind.
|
||||
an empty ${CALC_INCDIR}/custom may be left behind.
|
||||
|
||||
Fixed a problem where a "make clobber" would remove custom/Makefile
|
||||
and fail to rebuilt it.
|
||||
@@ -300,7 +656,7 @@ The following are the changes from calc version 2.12.1.1 to 2.12.2.2:
|
||||
Fixed the wording for the -i flag in the calc man page.
|
||||
|
||||
Added some notes to the help/unexpected file regarding calc
|
||||
and interactice shells.
|
||||
and interactive shells.
|
||||
|
||||
Fixed bug where a FILEPOS was copied FPOS_POS_BITS octets instead of
|
||||
FPOS_POS_LEN octets.
|
||||
@@ -324,7 +680,7 @@ The following are the changes from calc version 2.12.1.1 to 2.12.2.2:
|
||||
operate over a half closed interval. The help/rand and help/random
|
||||
refer to the top of the interval as "beyond" instead of "max".
|
||||
|
||||
Releaseing source tar balls using bzip2 instead of with gzip. So
|
||||
Releasing source tar balls using bzip2 instead of with gzip. So
|
||||
what was calc-something.tar.gz is now calc-something.tar.bz2.
|
||||
To "uncompress" use:
|
||||
|
||||
@@ -463,7 +819,7 @@ The following are the changes from calc version 2.12.1.10 to 2.12.2:
|
||||
|
||||
calc-contrib at asthe dot com
|
||||
|
||||
EMail address an "ifeq ($(target),YOUR_TARGET_NAME)"
|
||||
Email address an "ifeq ($(target),YOUR_TARGET_NAME)"
|
||||
... "endif" set of lines from the Makefile so that
|
||||
we can consider them for the next release.
|
||||
|
||||
@@ -596,7 +952,7 @@ The following are the changes from calc version 2.12.1.10 to 2.12.2:
|
||||
2.5 ^ 2.718i 3.13145i ^ 0.30103i
|
||||
|
||||
Fixed typos in the calc man page thanks to a Debian bug report
|
||||
by A. Costa <agcosta at gis dot .net> that wsa kindly forwarded
|
||||
by A. Costa <agcosta at gis dot .net> that was kindly forwarded
|
||||
to us by Martin Buck <m at rtin-buck dot de>.
|
||||
|
||||
|
||||
@@ -1217,7 +1573,7 @@ The following are the changes from calc version 2.11.10 to 2.11.10:
|
||||
and ${L64_FORMAT}. Removed longlong.c and longlong.h. The use
|
||||
of HAVE_LONGLONG=0 was problematic. The lack of complaints about
|
||||
the HAVE_LONGLONG=0 shows that the 'long long' type is wide spread
|
||||
enough warrent not trying to support compilers without 'long long'.
|
||||
enough to warrant not trying to support compilers without 'long long'.
|
||||
|
||||
Removed the SVAL and SHVAL macros from zrand.c, zrand.h, and zmath.h
|
||||
as they were causing too many broken C pre-processors and C checkers
|
||||
@@ -1231,7 +1587,7 @@ The following are the changes from calc version 2.11.10 to 2.11.10:
|
||||
could test calc. Best wishes to the former BSDI folk and thanks
|
||||
for breaking important ground in the Open Source Movement!
|
||||
|
||||
Fixed several typos found in the documentation and buildin
|
||||
Fixed several typos found in the documentation and builtin
|
||||
function output by C Smith <smichr at hotmail dot com>.
|
||||
|
||||
Fixed -d so that:
|
||||
@@ -1279,8 +1635,7 @@ The following are the changes from calc version 2.11.10 to 2.11.10:
|
||||
The following are the changes from calc version 2.11.9 to 2.11.9.3:
|
||||
|
||||
Fixed calc man page examples to move -f to the end of the line.
|
||||
Thanks goes to Michael Somos <somos at grail dot cba dot csuohio
|
||||
dot edu> for pointing this out.
|
||||
Thanks goes to Michael Somos for pointing this out.
|
||||
|
||||
Linux and gcc now compiled with -Wall -W -Wno-comment.
|
||||
|
||||
@@ -1604,7 +1959,7 @@ The following are the changes from calc version 2.11.5t4.1 to 2.11.5t4.4:
|
||||
version string.
|
||||
|
||||
Added subject requirements for the calc-tester-request and
|
||||
calc-bugs-mail EMail aliases. See:
|
||||
calc-bugs-mail Email aliases. See:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/email.html
|
||||
|
||||
@@ -1632,7 +1987,7 @@ The following are the changes from calc version 2.11.5t4.1 to 2.11.5t4.4:
|
||||
(kawamura at mlb.co.jp) for the bug report and patch!
|
||||
|
||||
Fixed headers on fproduct.calc powerterm.calc 4dsphere.calc so
|
||||
that they are correcly changed on installation.
|
||||
that they are correctly changed on installation.
|
||||
|
||||
Added ${GREP} Makefile variable.
|
||||
|
||||
@@ -1916,7 +2271,7 @@ The following are the changes from calc version 2.11.4t1 to 2.11.4t2:
|
||||
function. It remains for backward compatibility.
|
||||
|
||||
The Makefile now builds have_fpos_pos.h to determine if the
|
||||
a non-scalar FILEPOS has a __pos stucture element. If it does,
|
||||
a non-scalar FILEPOS has a __pos structure element. If it does,
|
||||
the FILEPOS_BITS is taken to be the size of just the __pos element.
|
||||
|
||||
Misc fixes related to non-scalar (e.g., structure) FILEPOS. Fixed
|
||||
@@ -2181,8 +2536,8 @@ The following are the changes from calc version 2.11.2t0 to 2.11.2t1.0:
|
||||
Fixed a bug whereby help files are not displayed correctly on
|
||||
systems such as NetBSD 1.4.1. Thanks to a fix from Jakob Naumann.
|
||||
|
||||
Changed EMail addresses to use asthe.com. Changed URLs to use
|
||||
www.isthe.com. NOTE: The EMail address uses 'asthe' and the web
|
||||
Changed Email addresses to use asthe.com. Changed URLs to use
|
||||
www.isthe.com. NOTE: The Email address uses 'asthe' and the web
|
||||
site URL uses 'isthe'.
|
||||
|
||||
Using calc-bugs at asthe dot com for calc bug reports,
|
||||
@@ -2190,7 +2545,7 @@ The following are the changes from calc version 2.11.2t0 to 2.11.2t1.0:
|
||||
calc-tester-request at asthe dot com for requests to join calc-tester and
|
||||
calc-tester at asthe dot com for the calc tester mailing list.
|
||||
|
||||
Replaced explicit EMail addresses found this file with the <user at
|
||||
Replaced explicit Email addresses found this file with the <user at
|
||||
site dot domain> notation to reduce the potential for those folks
|
||||
to be spammed.
|
||||
|
||||
@@ -2666,7 +3021,7 @@ The following are the changes from calc version 2.11.0t8.9.1 to 2.11.0t9.4.5:
|
||||
by Prentice-Hall (UK) Ltd., 1990.) The piforever() function prints
|
||||
digits of pi for as long as your memory and system uptime allows. :-)
|
||||
|
||||
Fixed the URLs found thruout the source and documentation which did
|
||||
Fixed the URLs found throughout the source and documentation which did
|
||||
not and in /, but should for performance and server load reasons.
|
||||
|
||||
Cleaned up and improved handling of "mat" and "obj". The comma in:
|
||||
@@ -2745,7 +3100,7 @@ The following are the changes from calc version 2.11.0t8.9.1 to 2.11.0t9.4.5:
|
||||
and investigated by Michel van der List <vanderlistmj at sbphrd dot com>.
|
||||
|
||||
Made an effort to ensure that the v_subtype of VALUES are initialized
|
||||
to V_NOSUBTYPE thruout the source code.
|
||||
to V_NOSUBTYPE through out the source code.
|
||||
|
||||
Established a separate calc-bugs address from the calc-tester
|
||||
mailing list. Using anti-spam address forms in order to try and
|
||||
@@ -2778,7 +3133,7 @@ The following are the changes from calc version 2.11.0t8 to 2.11.0t8.9:
|
||||
If $CALCRC has more than one file as in file1:file2 and an error
|
||||
occurs in file1, then calc -c will not read file2.
|
||||
|
||||
Fixed some of the old EMail addresses found in calc documentation.
|
||||
Fixed some of the old Email addresses found in calc documentation.
|
||||
|
||||
Added HAVE_USTAT, HAVE_GETSID, HAVE_GETPGID, HAVE_GETTIME, HAVE_GETPRID
|
||||
and HAVE_URANDOM symbols to the Makefile. These symbols, along with
|
||||
@@ -3236,7 +3591,7 @@ The following are the changes from calc version 2.11.0t1 to 2.11.0t6.3:
|
||||
A patch from Ernest Bowen <ernie at turing dot une dot edu dot au> now
|
||||
defines special meaning to the first 2 bits of config("lib_debug"):
|
||||
|
||||
bit 0 set => messages printed when inputisterminal
|
||||
bit 0 set => messages printed when input is from a terminal
|
||||
bit 1 set => messages printed when reading from a file
|
||||
|
||||
The lib/regress.cal regression suite does:
|
||||
@@ -4185,7 +4540,7 @@ The following are the changes from calc version 2.10.3t5.28 to 2.10.3t5.33:
|
||||
long Mersenne factorizations. The default reporting loop
|
||||
is now 10000 cycles.
|
||||
|
||||
SGI Mips r10k compile set is speced for IRIX6.5 with v7.2
|
||||
SGI Mips r10k compile set is specified for IRIX6.5 with v7.2
|
||||
compilers. A note for pre-IRIX6.5 and/or pre-v7.2 compilers
|
||||
is given in the compile set.
|
||||
|
||||
@@ -4446,7 +4801,7 @@ The following are the changes from calc version 2.10.3t5.1 to 2.10.3t5.10:
|
||||
surprises that C programmers may encounter.
|
||||
|
||||
Updated the 'help', 'intro' and 'overview' to reflect the
|
||||
full list of non-builtin function help files. Reorered the
|
||||
full list of non-builtin function help files. Reordered the
|
||||
'full' help file.
|
||||
|
||||
The blkalloc() builtin has been renamed blk().
|
||||
@@ -5397,7 +5752,7 @@ The following are the changes from calc version 2.10.2t4 to 2.10.2t24:
|
||||
|
||||
The regression test suite output has been changed so that it will
|
||||
output the same information regardless of CPU performance. In
|
||||
particular, cpu times of certain tests are not printed. This allows
|
||||
particular, CPU times of certain tests are not printed. This allows
|
||||
one to compare the regression output of two different systems easier.
|
||||
|
||||
A matrix or object declaration is now considered an expression
|
||||
@@ -5720,11 +6075,11 @@ The following are the changes from calc version 2.10.2t1 to 2.10.2t3:
|
||||
y = fgetstr(f); /* returns "Curt" */
|
||||
z = fgetstr(f); /* returns "Noll" */
|
||||
|
||||
The builtin fgetfield() returns the next field of non-whitepsace
|
||||
The builtin fgetfield() returns the next field of non-whitespace
|
||||
characters.
|
||||
|
||||
The builtins scan(), fscan(), strscan() read tokens (fields of
|
||||
non-whitepsace characters) and evaluates them. Thus:
|
||||
non-whitespace characters) and evaluates them. Thus:
|
||||
|
||||
global a,b,c;
|
||||
strscan("2+3 4^2\n c=a+b", a, b, 0);
|
||||
@@ -6003,7 +6358,7 @@ The following are the changes from calc version 2.10.1t11 to 2.10.1t19:
|
||||
config("all", "newstd")
|
||||
|
||||
Renamed config.h (configuration file built during the make) to conf.h.
|
||||
Added a new config.h to contain info on thw V_CONFIG type.
|
||||
Added a new config.h to contain info on the V_CONFIG type.
|
||||
|
||||
Fixed some ANSI C compile warnings.
|
||||
|
||||
@@ -6568,7 +6923,7 @@ The following are the changes from calc version 2.9.3t8 to 2.9.3t9.2:
|
||||
the rand() builtin does not match the additive 55 / shuffle
|
||||
generators from the old cryrand.cal file.
|
||||
|
||||
Added Makfile support for building BSD/386 releases.
|
||||
Added Makefile support for building BSD/386 releases.
|
||||
|
||||
The cmp() builtin can now compare complex values.
|
||||
|
||||
@@ -6619,10 +6974,10 @@ The following are the changes from calc version 2.9.3t8 to 2.9.3t9.2:
|
||||
which is built from have_const.c will determine if we can or should
|
||||
use const. See the Makefile for details.
|
||||
|
||||
Some systems do not have uid_t. The file have_uid_t.h, which is
|
||||
built from have_uid_t.c will determine if we can or should depend
|
||||
on uid_t being typefed by the system include files. See the Makefile
|
||||
for details.
|
||||
Some systems do not have uid_t. The file have_uid_t.h, which
|
||||
is built from have_uid_t.c will determine if we can or should
|
||||
depend on uid_t being typedefed by the system include files.
|
||||
See the Makefile for details.
|
||||
|
||||
Some systems do not have memcpy(), memset() and strchr(). The
|
||||
file have_newstr.h, which is built from have_newstr.c will
|
||||
@@ -6928,7 +7283,7 @@ Following is a list of visible changes to calc from version 1.24.7 to 1.26.1:
|
||||
|
||||
A small bug in the library file regress.cal was fixed.
|
||||
|
||||
## Copyright (C) 2001 Landon Curt Noll
|
||||
## Copyright (C) 2001-2017 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -6944,10 +7299,6 @@ Following is a list of visible changes to calc from version 1.24.7 to 1.26.1:
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
##
|
||||
## @(#) $Revision: 30.33 $
|
||||
## @(#) $Id: CHANGES,v 30.33 2013/09/01 22:19:41 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/bin/calc/RCS/CHANGES,v $
|
||||
##
|
||||
## Under source code control: 1993/06/02 18:12:57
|
||||
## File existed as early as: 1989
|
||||
##
|
||||
|
65
COPYING
65
COPYING
@@ -6,16 +6,12 @@ This file is Copyrighted
|
||||
|
||||
This file is covered under the following Copyright:
|
||||
|
||||
Copyright (C) 1999-2008 Landon Curt Noll
|
||||
Copyright (C) 1999-2014 Landon Curt Noll
|
||||
All rights reserved.
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
# @(#) $Revision: 30.4 $
|
||||
# @(#) $Id: COPYING,v 30.4 2013/09/01 20:14:30 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/bin/calc/RCS/COPYING,v $
|
||||
|
||||
-=-
|
||||
|
||||
Calc is covered by the GNU Lesser General Public License
|
||||
@@ -53,45 +49,62 @@ Calc is covered by the GNU Lesser General Public License
|
||||
Boston, MA 02110-1301
|
||||
USA
|
||||
|
||||
The contact addresses for calc is as follows:
|
||||
To subscribe to the calc-tester mailing list, visit the following URL:
|
||||
|
||||
Web: http://www.isthe.com/chongo/tech/comp/calc/email.html
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-tester.html
|
||||
|
||||
To join the low volume calc mailing list. Send a EMail message to:
|
||||
This is a low volume moderated mailing list.
|
||||
|
||||
calc-tester-request at asthe dot com
|
||||
This mailing list replaces calc-tester at asthe dot com list.
|
||||
|
||||
Your subject must contain the words:
|
||||
If you need a human to help you with your mailing list subscription,
|
||||
please send EMail to our special:
|
||||
|
||||
calc mailing list subscription
|
||||
calc-tester-maillist-help at asthe dot com
|
||||
|
||||
You may have additional words in your subject line.
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
|
||||
Your message body (not the subject) should consist of:
|
||||
address. To be sure we see your EMail asking for help with your
|
||||
mailing list subscription, please use the following phase in your
|
||||
EMail Subject line:
|
||||
|
||||
subscribe calc-tester address
|
||||
end
|
||||
name your_full_name
|
||||
calc tester mailing list help
|
||||
|
||||
where ``address'' is your EMail address and ``your_full_name'' is
|
||||
your full name.
|
||||
|
||||
Feel free to follow the name line with additional EMail text as desired.
|
||||
That phrase in your subject line will help ensure your
|
||||
request will get past our anti-spam filters. You may have
|
||||
additional words in your subject line.
|
||||
|
||||
-=-
|
||||
|
||||
Calc bug reports and calc bug fixes should be sent to:
|
||||
|
||||
calc-bugs at asthe dot com
|
||||
calc-bug-report at asthe dot com
|
||||
|
||||
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||
[[ NOTE: The EMail address uses 'asthe' and the web site URL uses 'isthe' ]]
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
|
||||
Your subject must contain the words:
|
||||
This replaces the old calc-bugs at asthe dot com address.
|
||||
|
||||
calc bug report
|
||||
To be sure we see your EMail reporting a calc bug, please use the
|
||||
following phase in your EMail Subject line:
|
||||
|
||||
You may have additional words in your subject line.
|
||||
calc bug report
|
||||
|
||||
That phrase in your subject line will help ensure your
|
||||
request will get past our anti-spam filters. You may have
|
||||
additional words in your subject line.
|
||||
|
||||
However, you may find it more helpful to simply subscribe
|
||||
to the calc-tester mailing list (see above) and then to
|
||||
send your report to that mailing list as a wider set calc
|
||||
testers may be able to help you.
|
||||
|
||||
-=-
|
||||
|
||||
The calc web site is located at:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/
|
||||
|
||||
NOTE: The EMail address uses 'asthe', while the web site uses 'isthe'.
|
||||
|
||||
-=-
|
||||
|
||||
|
@@ -185,8 +185,8 @@ Installing calc from the bzip2-ed tarball in 4 easy steps:
|
||||
|
||||
make install
|
||||
|
||||
We suggest that you might want to read the README file and look at
|
||||
the calc help subsystem. See the README file for details.
|
||||
We suggest that you might want to read the README.FIRST file and look at
|
||||
the calc help subsystem. See also the README.md file.
|
||||
|
||||
## Copyright (C) 1999-2007 Landon Curt Noll
|
||||
##
|
||||
@@ -204,10 +204,6 @@ the calc help subsystem. See the README file for details.
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
##
|
||||
## @(#) $Revision: 30.6 $
|
||||
## @(#) $Id: HOWTO.INSTALL,v 30.6 2007/10/16 12:22:22 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/bin/calc/RCS/HOWTO.INSTALL,v $
|
||||
##
|
||||
## Under source code control: 1999/09/27 20:48:44
|
||||
## File existed as early as: 1999
|
||||
##
|
||||
|
4
LIBRARY
4
LIBRARY
@@ -638,10 +638,6 @@ need call libcalc_call_me_last() only once.
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
##
|
||||
## @(#) $Revision: 30.1 $
|
||||
## @(#) $Id: LIBRARY,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/bin/calc/RCS/LIBRARY,v $
|
||||
##
|
||||
## Under source code control: 1993/07/30 19:44:49
|
||||
## File existed as early as: 1993
|
||||
##
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -73,52 +73,64 @@ for a wish/todo list. Code contributions are welcome.
|
||||
|
||||
=-=
|
||||
|
||||
To join the calc-tester mailing list. Send an EMail message to:
|
||||
To subscribe to the calc-tester mailing list, visit the following URL:
|
||||
|
||||
calc-tester-request at asthe dot com
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-tester.html
|
||||
|
||||
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||
[[ NOTE: The EMail address uses 'asthe' and the web site URL uses 'isthe' ]]
|
||||
This is a low volume moderated mailing list.
|
||||
|
||||
Your subject must contain the words:
|
||||
This mailing list replaces calc-tester at asthe dot com list.
|
||||
|
||||
calc mailing list subscription
|
||||
If you need a human to help you with your mailing list subscription,
|
||||
please send EMail to our special:
|
||||
|
||||
You may have additional words in your subject line.
|
||||
calc-tester-maillist-help at asthe dot com
|
||||
|
||||
Your message body (not the subject) should consist of:
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
|
||||
subscribe calc-tester address
|
||||
end
|
||||
name your_full_name
|
||||
address. To be sure we see your EMail asking for help with your
|
||||
mailing list subscription, please use the following phase in your
|
||||
EMail Subject line:
|
||||
|
||||
where ``address'' is your EMail address and ``your_full_name'' is
|
||||
your full name.
|
||||
calc tester mailing list help
|
||||
|
||||
Feel free to follow the name line with additional EMail text as desired.
|
||||
That phrase in your subject line will help ensure your
|
||||
request will get past our anti-spam filters. You may have
|
||||
additional words in your subject line.
|
||||
|
||||
=-=
|
||||
-=-
|
||||
|
||||
Send Calc bug and bug fixes to:
|
||||
Calc bug reports and calc bug fixes should be sent to:
|
||||
|
||||
calc-bugs at asthe dot com
|
||||
calc-bug-report at asthe dot com
|
||||
|
||||
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||
[[ NOTE: The EMail address uses 'asthe' and the web site URL uses 'isthe' ]]
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
|
||||
but see the BUGS file first.
|
||||
This replaces the old calc-bugs at asthe dot com address.
|
||||
|
||||
Your subject must contain the words:
|
||||
To be sure we see your EMail reporting a calc bug, please use the
|
||||
following phase in your EMail Subject line:
|
||||
|
||||
calc bug report
|
||||
calc bug report
|
||||
|
||||
You may have additional words in your subject line.
|
||||
That phrase in your subject line will help ensure your
|
||||
request will get past our anti-spam filters. You may have
|
||||
additional words in your subject line.
|
||||
|
||||
However, you may find it more helpful to simply subscribe
|
||||
to the calc-tester mailing list (see above) and then to
|
||||
send your report to that mailing list as a wider set calc
|
||||
testers may be able to help you.
|
||||
|
||||
-=-
|
||||
|
||||
The calc web site is located at:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/
|
||||
http://www.isthe.com/chongo/tech/comp/calc/
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
NOTE: The EMail address uses 'asthe', while the web site uses 'isthe'.
|
||||
|
||||
## Copyright (C) 1999,2014,2017 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -134,10 +146,6 @@ The calc web site is located at:
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
##
|
||||
## @(#) $Revision: 30.1 $
|
||||
## @(#) $Id: README,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/bin/calc/RCS/README,v $
|
||||
##
|
||||
## Under source code control: 1995/10/25 05:27:59
|
||||
## File existed as early as: 1995
|
||||
##
|
@@ -142,10 +142,6 @@ the above Makefile list, follow the recommendation in the Makefile.
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
##
|
||||
## @(#) $Revision: 30.2 $
|
||||
## @(#) $Id: README.WINDOWS,v 30.2 2009/03/14 02:29:31 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/bin/calc/RCS/README.WINDOWS,v $
|
||||
##
|
||||
## Under source code control: 2001/02/25 14:00:05
|
||||
## File existed as early as: 2001
|
||||
##
|
||||
|
260
README.md
Normal file
260
README.md
Normal file
@@ -0,0 +1,260 @@
|
||||
# What is calc?
|
||||
|
||||
Calc is an interactive calculator which provides for easy large
|
||||
Otherwise, it enters interactive mode. In this mode, it accepts
|
||||
commands one at a time, processes them, and displays the answers.
|
||||
In the simplest case, commands are simply expressions which are
|
||||
evaluated. For example, the following line can be input:
|
||||
|
||||
```sh
|
||||
3 * (4 + 1)
|
||||
```
|
||||
|
||||
and the calculator will print:
|
||||
|
||||
```sh
|
||||
15
|
||||
```
|
||||
|
||||
Calc as the usual collection of arithmetic operators +, -, /, * as
|
||||
well as ^ (exponentiation), % (modulus) and // (integer divide).
|
||||
For example:
|
||||
|
||||
```sh
|
||||
3 * 19^43 - 1
|
||||
```
|
||||
|
||||
will produce:
|
||||
|
||||
```sh
|
||||
29075426613099201338473141505176993450849249622191102976
|
||||
```
|
||||
|
||||
Notice that calc values can be very large. For example:
|
||||
|
||||
```sh
|
||||
2^23209-1
|
||||
```
|
||||
|
||||
will print:
|
||||
|
||||
```sh
|
||||
402874115778988778181873329071 ... many digits ... 3779264511
|
||||
```
|
||||
|
||||
The special '.' symbol (called dot), represents the result of the
|
||||
last command expression, if any. This is of great use when a series
|
||||
of partial results are calculated, or when the output mode is changed
|
||||
and the last result needs to be redisplayed. For example, the above
|
||||
result can be modified by typing:
|
||||
|
||||
```sh
|
||||
. % (2^127-1)
|
||||
```
|
||||
|
||||
and the calculator will print:
|
||||
|
||||
```sh
|
||||
47385033654019111249345128555354223304
|
||||
```
|
||||
|
||||
For more complex calculations, variables can be used to save the
|
||||
intermediate results. For example, the result of adding 7 to the
|
||||
previous result can be saved by typing:
|
||||
|
||||
```sh
|
||||
curds = 15
|
||||
whey = 7 + 2*curds
|
||||
```
|
||||
|
||||
Functions can be used in expressions. There are a great number of
|
||||
pre-defined functions. For example, the following will calculate
|
||||
the factorial of the value of 'whey':
|
||||
|
||||
```sh
|
||||
fact(whey)
|
||||
```
|
||||
|
||||
and the calculator prints:
|
||||
|
||||
```sh
|
||||
13763753091226345046315979581580902400000000
|
||||
```
|
||||
|
||||
The calculator also knows about complex numbers, so that typing:
|
||||
|
||||
```sh
|
||||
(2+3i) * (4-3i)
|
||||
cos(.)
|
||||
```
|
||||
|
||||
will print:
|
||||
|
||||
```sh
|
||||
17+6i
|
||||
-55.50474777265624667147+193.9265235748927986537i
|
||||
```
|
||||
|
||||
The calculator can calculate transcendental functions, and accept and
|
||||
display numbers in real or exponential format. For example, typing:
|
||||
|
||||
```sh
|
||||
config("display", 70),
|
||||
epsilon(1e-70),
|
||||
sin(1)
|
||||
```
|
||||
|
||||
prints:
|
||||
|
||||
```sh
|
||||
0.8414709848078965066525023216302989996225630607983710656727517099919104
|
||||
```
|
||||
|
||||
Calc can output values in terms of fractions, octal or hexadecimal.
|
||||
For example:
|
||||
|
||||
```sh
|
||||
config("mode", "fraction"),
|
||||
(17/19)^23
|
||||
print
|
||||
base(16),
|
||||
(19/17)^29
|
||||
print
|
||||
log(79.3i)
|
||||
```
|
||||
|
||||
will print:
|
||||
|
||||
```sh
|
||||
19967568900859523802559065713/257829627945307727248226067259
|
||||
|
||||
0x9201e65bdbb801eaf403f657efcf863/0x5cd2e2a01291ffd73bee6aa7dcf7d1
|
||||
|
||||
0x17b5164ac24ee836bf/0xc7b7a8e3ef5fcf752+0x883eaf5adadd26be3/0xc7b7a8e3ef5fcf752i
|
||||
```
|
||||
|
||||
All numbers are represented as fractions with arbitrarily large
|
||||
numerators and denominators which are always reduced to lowest terms.
|
||||
Real or exponential format numbers can be input and are converted
|
||||
to the equivalent fraction. Hex, binary, or octal numbers can be
|
||||
input by using numbers with leading '0x', '0b' or '0' characters.
|
||||
Complex numbers can be input using a trailing 'i', as in '2+3i'.
|
||||
Strings and characters are input by using single or double quotes.
|
||||
|
||||
Commands are statements in a C-like language, where each input
|
||||
line is treated as the body of a procedure. Thus the command
|
||||
line can contain variable declarations, expressions, labels,
|
||||
conditional tests, and loops. Assignments to any variable name
|
||||
will automatically define that name as a global variable. The
|
||||
other important thing to know is that all non-assignment expressions
|
||||
which are evaluated are automatically printed. Thus, you can evaluate
|
||||
an expression's value by simply typing it in.
|
||||
|
||||
Many useful built-in mathematical functions are available. Use the:
|
||||
|
||||
```sh
|
||||
help builtin
|
||||
```
|
||||
|
||||
command to list them.
|
||||
|
||||
You can also define your own functions by using the 'define' keyword,
|
||||
followed by a function declaration very similar to C.
|
||||
|
||||
```sh
|
||||
define f2(n)
|
||||
{
|
||||
local ans;
|
||||
|
||||
ans = 1;
|
||||
while (n > 1)
|
||||
ans *= (n -= 2);
|
||||
return ans;
|
||||
}
|
||||
```
|
||||
|
||||
Thus the input:
|
||||
|
||||
```sh
|
||||
f2(79)
|
||||
```
|
||||
|
||||
will produce:
|
||||
|
||||
```sh
|
||||
1009847364737869270905302433221592504062302663202724609375
|
||||
```
|
||||
|
||||
Functions which only need to return a simple expression can be defined
|
||||
using an equals sign, as in the example:
|
||||
|
||||
```sh
|
||||
define sc(a,b) = a^3 + b^3
|
||||
```
|
||||
|
||||
Thus the input:
|
||||
|
||||
```sh
|
||||
sc(31, 61)
|
||||
```
|
||||
|
||||
will produce:
|
||||
|
||||
```sh
|
||||
256772
|
||||
```
|
||||
|
||||
Variables in functions can be defined as either 'global', 'local',
|
||||
or 'static'. Global variables are common to all functions and the
|
||||
command line, whereas local variables are unique to each function
|
||||
level, and are destroyed when the function returns. Static variables
|
||||
are scoped within single input files, or within functions, and are
|
||||
never destroyed. Variables are not typed at definition time, but
|
||||
dynamically change as they are used.
|
||||
|
||||
For more information about the calc language and features, try:
|
||||
|
||||
```sh
|
||||
help overview
|
||||
```
|
||||
|
||||
Calc has a help command that will produce information about
|
||||
every builtin function, command as well as a number of other
|
||||
aspects of calc usage. Try the command:
|
||||
|
||||
```sh
|
||||
help help
|
||||
```
|
||||
|
||||
for and overview of the help system. The command:
|
||||
|
||||
```sh
|
||||
help builtin
|
||||
```
|
||||
|
||||
provides information on built-in mathematical functions, whereas:
|
||||
|
||||
```sh
|
||||
help asinh
|
||||
```
|
||||
|
||||
will provides information a specific function. The following
|
||||
help files:
|
||||
|
||||
```sh
|
||||
help command
|
||||
help define
|
||||
help operator
|
||||
help statement
|
||||
help variable
|
||||
```
|
||||
|
||||
provide a good overview of the calc language. If you are familiar
|
||||
with C, you should also try:
|
||||
|
||||
```sh
|
||||
help unexpected
|
||||
```
|
||||
|
||||
It contains information about differences between C and calc
|
||||
that may surprize C programmers.
|
4
addop.c
4
addop.c
@@ -19,10 +19,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: addop.c,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/RCS/addop.c,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:48:10
|
||||
* File existed as early as: before 1990
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: align32.c,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/RCS/align32.c,v $
|
||||
*
|
||||
* Under source code control: 1995/11/23 05:18:06
|
||||
* File existed as early as: 1995
|
||||
*
|
||||
|
12
alloc.h
12
alloc.h
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* alloc - storage allocation and storage debug macros
|
||||
*
|
||||
* Copyright (C) 1999-2007 David I. Bell
|
||||
* Copyright (C) 1999-2007,2014 David I. Bell
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.3 $
|
||||
* @(#) $Id: alloc.h,v 30.3 2013/08/11 08:41:38 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/RCS/alloc.h,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:48:29
|
||||
* File existed as early as: before 1990
|
||||
*
|
||||
@@ -28,8 +24,8 @@
|
||||
*/
|
||||
|
||||
|
||||
#if !defined(__ALLOC_H__)
|
||||
#define __ALLOC_H__
|
||||
#if !defined(INCLUDE_ALLOC_H)
|
||||
#define INCLUDE_ALLOC_H
|
||||
|
||||
|
||||
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
||||
@@ -92,4 +88,4 @@ E_FUNC int strcmp();
|
||||
E_FUNC void *memmove(void *s1, CONST void *s2, MEMMOVE_SIZE_T n);
|
||||
#endif
|
||||
|
||||
#endif /* !__ALLOC_H__ */
|
||||
#endif /* !INCLUDE_ALLOC_H */
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.2 $
|
||||
* @(#) $Id: assocfunc.c,v 30.2 2013/08/11 08:41:38 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/RCS/assocfunc.c,v $
|
||||
*
|
||||
* Under source code control: 1993/07/20 23:04:27
|
||||
* File existed as early as: 1993
|
||||
*
|
||||
@@ -83,7 +79,7 @@ associndex(ASSOC *ap, BOOL create, long dim, VALUE *indices)
|
||||
* so that we can first select the correct hash chain, and
|
||||
* also so we can quickly compare each element for a match.
|
||||
*/
|
||||
hash = FNV1_32_BASIS;
|
||||
hash = QUICKHASH_BASIS;
|
||||
for (i = 0; i < dim; i++)
|
||||
hash = hashvalue(&indices[i], hash);
|
||||
|
||||
|
4
blkcpy.c
4
blkcpy.c
@@ -19,10 +19,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.2 $
|
||||
* @(#) $Id: blkcpy.c,v 30.2 2013/08/11 08:41:38 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/RCS/blkcpy.c,v $
|
||||
*
|
||||
* Under source code control: 1997/04/18 20:41:26
|
||||
* File existed as early as: 1997
|
||||
*
|
||||
|
12
blkcpy.h
12
blkcpy.h
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* blkcpy - general values and related routines used by the calculator
|
||||
*
|
||||
* Copyright (C) 1999-2007 Landon Curt Noll and Ernest Bowen
|
||||
* Copyright (C) 1999-2007,2014 Landon Curt Noll and Ernest Bowen
|
||||
*
|
||||
* Primary author: Landon Curt Noll
|
||||
*
|
||||
@@ -19,10 +19,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: blkcpy.h,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/RCS/blkcpy.h,v $
|
||||
*
|
||||
* Under source code control: 1997/04/18 20:41:25
|
||||
* File existed as early as: 1997
|
||||
*
|
||||
@@ -30,8 +26,8 @@
|
||||
*/
|
||||
|
||||
|
||||
#if !defined(__BLKCPY_H__)
|
||||
#define __BLKCPY_H__
|
||||
#if !defined(INCLUDE_BLKCPY_H)
|
||||
#define INCLUDE_BLKCPY_H
|
||||
|
||||
/*
|
||||
* the main copy gateway function
|
||||
@@ -59,4 +55,4 @@ E_FUNC int copystr2blk(STRING *, long, long, BLOCK *, long, BOOL);
|
||||
E_FUNC int copystr2file(STRING *, long, long, FILEID, long);
|
||||
E_FUNC int copystr2str(STRING *, long, long, STRING *, long);
|
||||
|
||||
#endif /* !__BLKCPY_H__ */
|
||||
#endif /* !INCLUDE_BLKCPY_H */
|
||||
|
4
block.c
4
block.c
@@ -19,10 +19,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: block.c,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/RCS/block.c,v $
|
||||
*
|
||||
* Under source code control: 1997/02/27 00:29:40
|
||||
* File existed as early as: 1997
|
||||
*
|
||||
|
12
block.h
12
block.h
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* block - fixed, dynamic, fifo and circular memory blocks
|
||||
*
|
||||
* Copyright (C) 1999-2007 Landon Curt Noll and Ernest Bowen
|
||||
* Copyright (C) 1999-2007,2014 Landon Curt Noll and Ernest Bowen
|
||||
*
|
||||
* Primary author: Landon Curt Noll
|
||||
*
|
||||
@@ -19,10 +19,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: block.h,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/RCS/block.h,v $
|
||||
*
|
||||
* Under source code control: 1997/02/21 05:03:39
|
||||
* File existed as early as: 1997
|
||||
*
|
||||
@@ -31,8 +27,8 @@
|
||||
*/
|
||||
|
||||
|
||||
#if !defined(__BLOCK_H__)
|
||||
#define __BLOCK_H__
|
||||
#if !defined(INCLUDE_BLOCK_H)
|
||||
#define INCLUDE_BLOCK_H
|
||||
|
||||
|
||||
/*
|
||||
@@ -222,4 +218,4 @@ E_FUNC int countnblocks(void);
|
||||
E_FUNC void shownblocks(void);
|
||||
|
||||
|
||||
#endif /* !__BLOCK_H__ */
|
||||
#endif /* !INCLUDE_BLOCK_H */
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.2 $
|
||||
* @(#) $Id: byteswap.c,v 30.2 2013/08/11 08:41:38 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/RCS/byteswap.c,v $
|
||||
*
|
||||
* Under source code control: 1995/10/11 04:44:01
|
||||
* File existed as early as: 1995
|
||||
*
|
||||
|
12
byteswap.h
12
byteswap.h
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* byteswap - byte swapping macros
|
||||
*
|
||||
* Copyright (C) 1999 Landon Curt Noll
|
||||
* Copyright (C) 1999,2014 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: byteswap.h,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/RCS/byteswap.h,v $
|
||||
*
|
||||
* Under source code control: 1995/10/11 04:44:01
|
||||
* File existed as early as: 1995
|
||||
*
|
||||
@@ -29,8 +25,8 @@
|
||||
*/
|
||||
|
||||
|
||||
#if !defined(__BYTESWAP_H__)
|
||||
#define __BYTESWAP_H__
|
||||
#if !defined(INCLUDE_BYTESWAP_H)
|
||||
#define INCLUDE_BYTESWAP_H
|
||||
|
||||
|
||||
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
||||
@@ -178,4 +174,4 @@
|
||||
#endif /* LONG_BITS == 64 */
|
||||
|
||||
|
||||
#endif /* !__BYTESWAP_H__ */
|
||||
#endif /* !INCLUDE_BYTESWAP_H */
|
||||
|
111
cal/Makefile
111
cal/Makefile
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# cal - makefile for calc standard resource files
|
||||
#
|
||||
# Copyright (C) 1999-2006 Landon Curt Noll
|
||||
# Copyright (C) 1999-2006,2017 Landon Curt Noll
|
||||
#
|
||||
# Calc is open software; you can redistribute it and/or modify it under
|
||||
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -18,10 +18,6 @@
|
||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# @(#) $Revision: 30.7 $
|
||||
# @(#) $Id: Makefile,v 30.7 2013/08/11 09:07:26 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/bin/calc/cal/RCS/Makefile,v $
|
||||
#
|
||||
# Under source code control: 1991/07/21 05:00:54
|
||||
# File existed as early as: 1991
|
||||
#
|
||||
@@ -179,25 +175,42 @@ MV= mv
|
||||
CO= co
|
||||
TRUE= true
|
||||
TOUCH= touch
|
||||
SED= sed
|
||||
SORT= sort
|
||||
FMT= fmt
|
||||
|
||||
# The calc files to install
|
||||
#
|
||||
CALC_FILES= alg_config.cal beer.cal bernoulli.cal bernpoly.cal \
|
||||
bigprime.cal bindings brentsolve.cal chi.cal chrem.cal constants.cal \
|
||||
deg.cal dms.cal dotest.cal ellip.cal factorial2.cal factorial.cal \
|
||||
gvec.cal hello.cal hms.cal intfile.cal lambertw.cal linear.cal \
|
||||
lnseries.cal lucas.cal lucas_chk.cal lucas_tbl.cal mersenne.cal \
|
||||
mfactor.cal mod.cal natnumset.cal pell.cal pi.cal pix.cal pollard.cal \
|
||||
poly.cal prompt.cal psqrt.cal qtime.cal quat.cal randbitrun.cal \
|
||||
randmprime.cal randombitrun.cal randomrun.cal randrun.cal README \
|
||||
regress.cal repeat.cal screen.cal seedrandom.cal set8700.cal \
|
||||
set8700.line solve.cal specialfunctions.cal statistics.cal sumsq.cal \
|
||||
# This list is prodiced by the detaillist rule when no WARNINGS are detected.
|
||||
#
|
||||
# Please use:
|
||||
#
|
||||
# make calc_files_list
|
||||
#
|
||||
# to keep this list in nice sorted order and to check that these
|
||||
# deailed help files are under RCS control.
|
||||
#
|
||||
CALC_FILES= README alg_config.cal beer.cal bernoulli.cal \
|
||||
bernpoly.cal bigprime.cal bindings brentsolve.cal chi.cal chrem.cal \
|
||||
constants.cal deg.cal dms.cal dotest.cal ellip.cal factorial.cal \
|
||||
factorial2.cal gvec.cal hello.cal hms.cal infinities.cal \
|
||||
intfile.cal intnum.cal lambertw.cal linear.cal lnseries.cal \
|
||||
lucas.cal lucas_chk.cal mersenne.cal mfactor.cal \
|
||||
mod.cal natnumset.cal pell.cal pi.cal pix.cal pollard.cal poly.cal \
|
||||
prompt.cal psqrt.cal qtime.cal quat.cal randbitrun.cal randmprime.cal \
|
||||
randombitrun.cal randomrun.cal randrun.cal regress.cal repeat.cal \
|
||||
screen.cal seedrandom.cal set8700.cal set8700.line smallfactors.cal \
|
||||
solve.cal specialfunctions.cal statistics.cal strings.cal sumsq.cal \
|
||||
sumtimes.cal surd.cal test1700.cal test2300.cal test2600.cal \
|
||||
test2700.cal test3100.cal test3300.cal test3400.cal test3500.cal \
|
||||
test4000.cal test4100.cal test4600.cal test5100.cal test5200.cal \
|
||||
test8400.cal test8500.cal test8600.cal test8900.cal toomcook.cal \
|
||||
unitfrac.cal varargs.cal xx_print.cal zeta2.cal
|
||||
|
||||
# These calc files are now obsolete and are removed by the install rule.
|
||||
#
|
||||
DEAD_CALC_FILES= lucas_tbl.cal
|
||||
|
||||
# These files are found (but not built) in the distribution
|
||||
#
|
||||
DISTLIST= ${CALC_FILES} ${MAKE_FILE}
|
||||
@@ -244,6 +257,27 @@ calcliblist:
|
||||
fi; \
|
||||
done
|
||||
|
||||
# These next rule help form the ${CALC_FILES} makefile variables above.
|
||||
#
|
||||
calc_files_list:
|
||||
${Q} -(find . -mindepth 1 -maxdepth 1 -type f -name '*.cal' -print | \
|
||||
while read i; do \
|
||||
if [ X"$$i" != X"/dev/null" ]; then \
|
||||
if [ ! -f RCS/$$i,v ]; then \
|
||||
echo "WARNING: $$i not under RCS control" 1>&2; \
|
||||
else \
|
||||
echo $$i; \
|
||||
fi; \
|
||||
fi; \
|
||||
done; \
|
||||
echo '--first_line--'; \
|
||||
echo README; \
|
||||
echo set8700.line; \
|
||||
echo bindings) | \
|
||||
${SED} -e 's:^\./::' | LANG=C ${SORT} | ${FMT} -70 | \
|
||||
${SED} -e '1s/--first_line--/CALC_FILES=/' -e '2,$$s/^/ /' \
|
||||
-e 's/$$/ \\/' -e '$$s/ \\$$//'
|
||||
|
||||
##
|
||||
#
|
||||
# rpm rules
|
||||
@@ -267,6 +301,23 @@ clean:
|
||||
|
||||
clobber: clean
|
||||
${RM} -f .all
|
||||
-${Q} if [ -e .DS_Store ]; then \
|
||||
echo ${RM} -rf .DS_Store; \
|
||||
${RM} -rf .DS_Store; \
|
||||
fi
|
||||
-${Q} for i in ${DEAD_CALC_FILES} /dev/null; do \
|
||||
if [ "$$i" = "/dev/null" ]; then \
|
||||
continue; \
|
||||
fi; \
|
||||
if [ -e "${T}${CALC_SHAREDIR}/$$i" ]; then \
|
||||
echo "${RM} -f ${T}${CALC_SHAREDIR}/$$i"; \
|
||||
${RM} -f ${T}${CALC_SHAREDIR}/$$i; \
|
||||
fi; \
|
||||
if [ -e "./$$i" ]; then \
|
||||
echo "${RM} -f ./$$i"; \
|
||||
${RM} -f ./$$i; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
# install everything
|
||||
#
|
||||
@@ -274,8 +325,8 @@ clobber: clean
|
||||
#
|
||||
install: all
|
||||
-${Q} if [ ! -d ${T}${CALC_SHAREDIR} ]; then \
|
||||
echo ${MKDIR} ${T}${CALC_SHAREDIR}; \
|
||||
${MKDIR} ${T}${CALC_SHAREDIR}; \
|
||||
echo ${MKDIR} -p ${T}${CALC_SHAREDIR}; \
|
||||
${MKDIR} -p ${T}${CALC_SHAREDIR}; \
|
||||
if [ ! -d "${T}${CALC_SHAREDIR}" ]; then \
|
||||
echo ${MKDIR} -p "${T}${CALC_SHAREDIR}"; \
|
||||
${MKDIR} -p "${T}${CALC_SHAREDIR}"; \
|
||||
@@ -299,12 +350,38 @@ install: all
|
||||
echo "installed ${T}${CALC_SHAREDIR}/$$i"; \
|
||||
fi; \
|
||||
done
|
||||
${Q} for i in ${DEAD_CALC_FILES} /dev/null; do \
|
||||
if [ "$$i" = "/dev/null" ]; then \
|
||||
continue; \
|
||||
fi; \
|
||||
if [ -e "${T}${CALC_SHAREDIR}/$$i" ]; then \
|
||||
echo "${RM} -f ${T}${CALC_SHAREDIR}/$$i"; \
|
||||
${RM} -f ${T}${CALC_SHAREDIR}/$$i; \
|
||||
fi; \
|
||||
if [ -e "./$$i" ]; then \
|
||||
echo "${RM} -f ./$$i"; \
|
||||
${RM} -f ./$$i; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
# Try to remove everything that was installed
|
||||
#
|
||||
# NOTE: Keep the uninstall rule in reverse order to the install rule
|
||||
#
|
||||
uninstall:
|
||||
- ${Q} for i in ${DEAD_CALC_FILES} /dev/null; do \
|
||||
if [ "$$i" = "/dev/null" ]; then \
|
||||
continue; \
|
||||
fi; \
|
||||
if [ -e "${T}${CALC_SHAREDIR}/$$i" ]; then \
|
||||
echo "${RM} -f ${T}${CALC_SHAREDIR}/$$i"; \
|
||||
${RM} -f ${T}${CALC_SHAREDIR}/$$i; \
|
||||
fi; \
|
||||
if [ -e "./$$i" ]; then \
|
||||
echo "${RM} -f ./$$i"; \
|
||||
${RM} -f ./$$i; \
|
||||
fi; \
|
||||
done
|
||||
-${Q} for i in ${CALC_FILES} /dev/null; do \
|
||||
if [ "$$i" = "/dev/null" ]; then \
|
||||
continue; \
|
||||
|
100
cal/README
100
cal/README
@@ -14,9 +14,12 @@ For example:
|
||||
|
||||
; read lucas
|
||||
lucas(h,n) defined
|
||||
gen_u2(h,n,v1) defined
|
||||
gen_u0(h,n,v1) defined
|
||||
rodseth_xhn(x,h,n) defined
|
||||
gen_v1(h,n) defined
|
||||
ldebug(funct,str) defined
|
||||
legacy_gen_v1(h,n) defined
|
||||
|
||||
will cause calc to load and execute the 'lucas.cal' resource file.
|
||||
Executing the resource file will cause several functions to be defined.
|
||||
@@ -35,12 +38,44 @@ Calc resource file files are provided because they serve as examples of
|
||||
how use the calc language, and/or because the authors thought them to
|
||||
be useful!
|
||||
|
||||
If you write something that you think is useful, please send it to:
|
||||
If you write something that you think is useful, please join the
|
||||
low volume calc mailing list calc-tester. Then send your contribution
|
||||
to the calc-tester mailing list.
|
||||
|
||||
calc-contrib at asthe dot com
|
||||
To subscribe to the calc-tester mailing list, visit the following URL:
|
||||
|
||||
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||
[[ NOTE: The EMail address uses 'asthe' and the web site URL uses 'isthe' ]]
|
||||
https://www.listbox.com/subscribe/?list_id=239342
|
||||
|
||||
To help determine you are a human and not just a spam bot,
|
||||
you will be required to provide the following additional info:
|
||||
|
||||
Your Name
|
||||
Calc Version
|
||||
Operating System
|
||||
The date 7 days ago
|
||||
|
||||
This is a low volume moderated mailing list.
|
||||
|
||||
This mailing list replaces calc-tester at asthe dot com list.
|
||||
|
||||
If you need a human to help you with your mailing list subscription,
|
||||
please send EMail to our special:
|
||||
|
||||
calc-tester-maillist-help at asthe dot com
|
||||
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
|
||||
address. To be sure we see your EMail asking for help with your
|
||||
mailing list subscription, please use the following phase in your
|
||||
EMail Subject line:
|
||||
|
||||
calc tester mailing list help
|
||||
|
||||
That phrase in your subject line will help ensure your
|
||||
request will get past our anti-spam filters. You may have
|
||||
additional words in your subject line.
|
||||
|
||||
=-=
|
||||
|
||||
By convention, a resource file only defines and/or initializes functions,
|
||||
objects and variables. (The regress.cal and testxxx.cal regression test
|
||||
@@ -760,7 +795,27 @@ lucas.cal
|
||||
|
||||
lucas(h, n)
|
||||
|
||||
Perform a primality test of h*2^n-1, with 1<=h<2*n.
|
||||
Perform a primality test of h*2^n-1.
|
||||
|
||||
gen_u2(h, n, v1)
|
||||
|
||||
Generate u(2) for h*2^n-1. This function is used by lucas(h, n),
|
||||
as the first term in the lucas sequence that is needed to
|
||||
prove that h*2^n-1 is prime or not prime.
|
||||
|
||||
NOTE: Some call this term u(0). The function gen_u0(h, n, v1)
|
||||
simply calls gen_u2(h, n, v1) for such people. :-)
|
||||
|
||||
gen_v1(h, v)
|
||||
|
||||
Generate v(1) for h*2^n-1. This function is used by lucas(h, n),
|
||||
via the gen_u2(h, n, v1), to supply the 3rd argument to gen_u2.
|
||||
|
||||
legacy_gen_v1(h, n)
|
||||
|
||||
Generate v(1) for h*2^n-1 using the legacy Amdahl 6 method.
|
||||
This function sometimes returns -1 for a few cases when
|
||||
h is a multiple of 3. This function is NOT used by lucas(h, n).
|
||||
|
||||
|
||||
lucas_chk.cal
|
||||
@@ -773,11 +828,6 @@ lucas_chk.cal
|
||||
Used by regress.cal during the 2100 test set.
|
||||
|
||||
|
||||
lucas_tbl.cal
|
||||
|
||||
Lucasian criteria for primality tables.
|
||||
|
||||
|
||||
mersenne.cal
|
||||
|
||||
mersenne(p)
|
||||
@@ -1382,25 +1432,17 @@ statistics.cal
|
||||
|
||||
strings.cal
|
||||
|
||||
toupper(s)
|
||||
tolower(s)
|
||||
strcasecmp(s1,s2)
|
||||
strncasecmp(s1,s2,length)
|
||||
isascii(c)
|
||||
isalnum(c)
|
||||
isalpha(c)
|
||||
iscntrl(c)
|
||||
isdigit(c)
|
||||
isgraph(c)
|
||||
islower(c)
|
||||
isprint(c)
|
||||
ispunct(c)
|
||||
isspace(c)
|
||||
isupper(c)
|
||||
isblank(c)
|
||||
isxdigit(c)
|
||||
|
||||
Implements most of the functions of libc's ctype.h and strings.h.
|
||||
Implements some of the functions of libc's ctype.h and strings.h.
|
||||
|
||||
NOTE: A number of the ctype.h and strings.h functions are now builtin
|
||||
functions in calc.
|
||||
|
||||
WARNING: If the remaining functions in this calc resource file become
|
||||
calc builtin functions, then strings.cal may be removed in
|
||||
a future release.
|
||||
|
||||
|
||||
sumsq.cal
|
||||
@@ -1774,7 +1816,7 @@ zeta2.cal
|
||||
for information on this special zeta function.
|
||||
|
||||
|
||||
## Copyright (C) 2000 David I. Bell and Landon Curt Noll
|
||||
## Copyright (C) 2000,2014,2017 David I. Bell and Landon Curt Noll
|
||||
##
|
||||
## Primary author: Landon Curt Noll
|
||||
##
|
||||
@@ -1792,10 +1834,6 @@ zeta2.cal
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
##
|
||||
## @(#) $Revision: 30.6 $
|
||||
## @(#) $Id: README,v 30.6 2013/08/18 20:01:53 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/bin/calc/cal/RCS/README,v $
|
||||
##
|
||||
## Under source code control: 1990/02/15 01:50:32
|
||||
## File existed as early as: before 1990
|
||||
##
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* alg_config - help determine optimal values for algorithm levels
|
||||
*
|
||||
* Copyright (C) 2006 Landon Curt Noll
|
||||
* Copyright (C) 2006,2014 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.2 $
|
||||
* @(#) $Id: alg_config.cal,v 30.2 2013/08/11 08:41:38 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/alg_config.cal,v $
|
||||
*
|
||||
* Under source code control: 2006/06/07 14:10:11
|
||||
* File existed as early as: 2006
|
||||
*
|
||||
@@ -28,8 +24,37 @@
|
||||
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||
*/
|
||||
|
||||
static test_time; /* try for this many seconds in loop test */
|
||||
|
||||
global test_time; /* try for this many seconds in loop test */
|
||||
|
||||
/*
|
||||
* close_to_one - set to 1 if the ratio is close enough to 1
|
||||
*
|
||||
* given:
|
||||
* ratio the ratio of time between two algorithms
|
||||
*
|
||||
* retuns:
|
||||
* 1 When ratio is near 1.0
|
||||
* 0 otherwise
|
||||
*
|
||||
* We consider the range [0.995, 1.005] to be close enough to 1 to be call unity
|
||||
* because of the precision of the CPU timing.
|
||||
*/
|
||||
define close_to_one(ratio)
|
||||
{
|
||||
/* firewall */
|
||||
if (!isreal(ratio)) {
|
||||
quit "close: 1st arg: must be a real number";
|
||||
}
|
||||
|
||||
/* check if the ratio is far from unity */
|
||||
if ((ratio < 0.995) || (ratio > 1.005)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* we are close to unity */
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
@@ -143,7 +168,7 @@ define mul_loop(repeat, x)
|
||||
* len length in BASEB-bit words to multiply
|
||||
*
|
||||
* return:
|
||||
* ratio of (1st / 2nd) algorithm rate
|
||||
* ratio of (1st / 2nd) algorithm rate.
|
||||
*
|
||||
* When want to determine a rate to a precision of 1 part in 1000.
|
||||
* Most systems today return CPU time to at least 10 msec precision.
|
||||
@@ -166,6 +191,7 @@ define mul_ratio(len)
|
||||
local tover; /* est of time for loop overhead */
|
||||
local alg1_rate; /* loop rate of 1st algorithm */
|
||||
local alg2_rate; /* loop rate of 2nd algorithm */
|
||||
local ret; /* return ratio, or 1.0 */
|
||||
local i;
|
||||
|
||||
/*
|
||||
@@ -218,12 +244,12 @@ define mul_ratio(len)
|
||||
* determine the 1st algorithm rate
|
||||
*/
|
||||
loops = max(1, ceil(loops * test_time / tlen));
|
||||
if (loops < 8) {
|
||||
if (loops < 16) {
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" we must expand loop test time to more than %d secs\n",
|
||||
ceil(test_time * (8 / loops)));
|
||||
printf(" we must expand alg1 loop test time to about %d secs\n",
|
||||
ceil(test_time * (16 / loops)));
|
||||
}
|
||||
loops = 8;
|
||||
loops = 16;
|
||||
}
|
||||
if (config("user_debug") > 3) {
|
||||
printf("\t will try alg1 %d loops\n", loops);
|
||||
@@ -264,12 +290,12 @@ define mul_ratio(len)
|
||||
* determine the 2nd algorithm rate
|
||||
*/
|
||||
loops = max(1, ceil(loops * test_time / tlen));
|
||||
if (loops < 8) {
|
||||
if (loops < 16) {
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" we must expand loop test time to more than %d secs\n",
|
||||
ceil(test_time * (8 / loops)));
|
||||
printf(" we must expand alg2 loop test time to about %d secs\n",
|
||||
ceil(test_time * (16 / loops)));
|
||||
}
|
||||
loops = 8;
|
||||
loops = 16;
|
||||
}
|
||||
tlen = mul_loop(loops, &x);
|
||||
if (config("user_debug") > 3) {
|
||||
@@ -298,7 +324,12 @@ define mul_ratio(len)
|
||||
/*
|
||||
* return alg1 / alg2 rate ratio
|
||||
*/
|
||||
return (alg1_rate / alg2_rate);
|
||||
ret = alg1_rate / alg2_rate;
|
||||
if (config("user_debug") > 2) {
|
||||
printf("\tprecise ratio is: %.f mul_ratio will return: %.3f\n",
|
||||
alg1_rate / alg2_rate, ret);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -320,30 +351,40 @@ define best_mul2()
|
||||
{
|
||||
local ratio; /* previously calculated alg1/alg2 ratio */
|
||||
local low; /* low loop value tested */
|
||||
local high; /* low loop value tested */
|
||||
local high; /* high loop value tested */
|
||||
local mid; /* between low and high */
|
||||
local best_val; /* value found with ratio closest to unity */
|
||||
local best_ratio; /* cloest ratio found to unity */
|
||||
local expand; /* how fast to expand the length */
|
||||
|
||||
/*
|
||||
* setup
|
||||
*/
|
||||
test_time = 15.0;
|
||||
if (config("user_debug") > 0) {
|
||||
printf("will start with loop test time of %d secs\n", test_time);
|
||||
printf("WARNING: This tool may not be computing the correct best value\n");
|
||||
test_time = 5.0;
|
||||
printf("The best_mul2() function will take a LONG time to run!\n");
|
||||
printf("It is important that best_mul2() run on an othwewise idle host!\n");
|
||||
if (config("user_debug") <= 0) {
|
||||
printf("To monitor progress, set user_debug to 2: "
|
||||
"config(\"user_debug\", 2)\n");
|
||||
}
|
||||
printf("Starting with loop test time of %d secs\n", test_time);
|
||||
|
||||
/*
|
||||
* firewall - must have a >1 ratio for the initial length
|
||||
*/
|
||||
high = 16;
|
||||
high = 8;
|
||||
best_val = high;
|
||||
if (config("user_debug") > 0) {
|
||||
printf("testing multiply alg1/alg2 ratio for len = %d\n", high);
|
||||
}
|
||||
ratio = mul_ratio(high);
|
||||
best_ratio = ratio;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" multiply alg1/alg2 ratio = %.3f\n", ratio);
|
||||
printf(" multiply alg1/alg2 ratio = %.6f\n", ratio);
|
||||
}
|
||||
if (ratio <= 1.0) {
|
||||
quit "best_mul2: tests imply config(\"mul2\") should be < 4";
|
||||
if (ratio < 1.0) {
|
||||
quit "best_mul2: tests imply mul2 should be < 16, which seems bogus";
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -356,7 +397,7 @@ define best_mul2()
|
||||
* We will multiplicatively expand our test level until
|
||||
* the ratio drops below 1.0.
|
||||
*/
|
||||
expand = ((ratio >= 3.5) ? 16 : 2^round(ratio));
|
||||
expand = 2;
|
||||
low = high;
|
||||
high *= expand;
|
||||
if (config("user_debug") > 1) {
|
||||
@@ -368,20 +409,63 @@ define best_mul2()
|
||||
* determine the alg1/alg2 test ratio for this new length
|
||||
*/
|
||||
if (high >= 2^31) {
|
||||
quit "best_mul2: tests imply config(\"mul2\") should be >= 2^31";
|
||||
quit "best_mul2: test implies mul2 >= 2^31, which seems bogus";
|
||||
}
|
||||
if (config("user_debug") > 0) {
|
||||
printf("testing multiply alg1/alg2 ratio for len = %d\n", high);
|
||||
}
|
||||
ratio = mul_ratio(high);
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" multiply alg1/alg2 ratio = %.3f\n", ratio);
|
||||
if (abs(ratio - 1.0) < abs(best_ratio - 1.0)) {
|
||||
best_val = high;
|
||||
best_ratio = ratio;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" len %d has a new cloest ratio to unity: %.6f\n",
|
||||
best_val, best_ratio);
|
||||
}
|
||||
}
|
||||
} while (ratio >= 1.0);
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" multiply alg1/alg2 ratio = %.6f\n", ratio);
|
||||
}
|
||||
} while (ratio > 1.0);
|
||||
|
||||
/*
|
||||
* If we previously expanded more than by a factor of 2, then
|
||||
* we may have jumped over the crossover point. So now
|
||||
* drop down powers of two until the ratio is again >= 1.0
|
||||
*/
|
||||
if (expand > 2) {
|
||||
do {
|
||||
|
||||
/*
|
||||
* contract by 2
|
||||
*/
|
||||
high /= 2;
|
||||
low = high / 2;
|
||||
if (config("user_debug") > 0) {
|
||||
printf("retesting multiply alg1/alg2 ratio for len = %d\n",
|
||||
high);
|
||||
}
|
||||
ratio = mul_ratio(high);
|
||||
if (abs(ratio - 1.0) < abs(best_ratio - 1.0)) {
|
||||
best_val = high;
|
||||
best_ratio = ratio;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" len %d has a new cloest ratio to unity: %.6f\n",
|
||||
best_val, best_ratio);
|
||||
}
|
||||
}
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" multiply alg1/alg2 ratio = %.6f\n", ratio);
|
||||
}
|
||||
|
||||
} while (ratio <= 1.0);
|
||||
|
||||
/* now that the ratio flipped again, use the previous range */
|
||||
low = high;
|
||||
high = high * 2;
|
||||
}
|
||||
if (config("user_debug") > 0) {
|
||||
printf("alg1/alg2 ratio now < 1.0, starting binary search "
|
||||
"between %d and %d\n",
|
||||
low, high);
|
||||
printf("Starting binary search between %d and %d\n", low, high);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -390,30 +474,54 @@ define best_mul2()
|
||||
while (low+1 < high) {
|
||||
|
||||
/* try the mid-point */
|
||||
mid = int((low+high)/2);
|
||||
if (config("user_debug") > 0) {
|
||||
printf("testing multiply alg1/alg2 ratio for len = %d\n",
|
||||
int((low+high)/2));
|
||||
printf("testing multiply alg1/alg2 ratio for len = %d\n", mid);
|
||||
}
|
||||
ratio = mul_ratio(mid);
|
||||
if (abs(ratio - 1.0) < abs(best_ratio - 1.0)) {
|
||||
best_val = mid;
|
||||
best_ratio = ratio;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" len %d has a new cloest ratio to unity: %.6f\n",
|
||||
best_val, best_ratio);
|
||||
}
|
||||
}
|
||||
ratio = mul_ratio(int((low+high)/2));
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" multiply alg1/alg2 ratio = %.3f\n", ratio);
|
||||
printf(" len %d multiply alg1/alg2 ratio = %.6f\n", mid, ratio);
|
||||
}
|
||||
|
||||
/* stop search if near unity */
|
||||
if (close_to_one(ratio)) {
|
||||
low = mid;
|
||||
high = mid;
|
||||
if (config("user_debug") > 0) {
|
||||
printf("\twe are close enough to unity ratio at: %d\n", mid);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/* bump lower range up if we went over */
|
||||
if (ratio >= 1.0) {
|
||||
if (ratio > 1.0) {
|
||||
if (config("user_debug") > 2) {
|
||||
printf("\tmove low from %d up to %d\n",
|
||||
low, int((low+high)/2));
|
||||
low, mid);
|
||||
}
|
||||
low = int((low+high)/2);
|
||||
low = mid;
|
||||
|
||||
/* drop higher range down if we went under */
|
||||
} else {
|
||||
if (config("user_debug") > 2) {
|
||||
printf("\tmove high from %d down to %d\n",
|
||||
high, int((low+high)/2));
|
||||
high, mid);
|
||||
}
|
||||
high = int((low+high)/2);
|
||||
high = mid;
|
||||
}
|
||||
|
||||
/* report on test loop progress */
|
||||
if (config("user_debug") > 1) {
|
||||
printf("\tsetting low: %d high: %d diff: %d\n",
|
||||
low, high, high-low);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -421,10 +529,15 @@ define best_mul2()
|
||||
* return on the suggested config("mul2") value
|
||||
*/
|
||||
if (config("user_debug") > 0) {
|
||||
printf("best value of config(\"mul2\") is %d\n",
|
||||
(ratio >= 1.0) ? high : low);
|
||||
printf("Best value for multiply is near %d\n", best_val);
|
||||
printf("Best multiply alg1/alg2 ratio is: %.6f\n", best_ratio);
|
||||
printf("We suggest placing this line in your .calcrc:\n");
|
||||
printf("config(\"mul2\", %d),;\n", best_val);
|
||||
printf("WARNING: It is believed that the output "
|
||||
"of this resource file is bogus!\n");
|
||||
printf("WARNING: You may NOT wish to follow the above suggeston.\n");
|
||||
}
|
||||
return ((ratio >= 1.0) ? high : low);
|
||||
return mid;
|
||||
}
|
||||
|
||||
|
||||
@@ -562,6 +675,7 @@ define sq_ratio(len)
|
||||
local tover; /* est of time for loop overhead */
|
||||
local alg1_rate; /* loop rate of 1st algorithm */
|
||||
local alg2_rate; /* loop rate of 2nd algorithm */
|
||||
local ret; /* return ratio, or 1.0 */
|
||||
local i;
|
||||
|
||||
/*
|
||||
@@ -614,12 +728,12 @@ define sq_ratio(len)
|
||||
* determine the 1st algorithm rate
|
||||
*/
|
||||
loops = max(1, ceil(loops * test_time / tlen));
|
||||
if (loops < 8) {
|
||||
if (loops < 16) {
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" we must expand loop test time to more than %d secs\n",
|
||||
ceil(test_time * (8 / loops)));
|
||||
printf(" we must expand alg1 loop test time to about %d secs\n",
|
||||
ceil(test_time * (16 / loops)));
|
||||
}
|
||||
loops = 8;
|
||||
loops = 16;
|
||||
}
|
||||
tlen = sq_loop(loops, &x);
|
||||
if (config("user_debug") > 3) {
|
||||
@@ -657,12 +771,12 @@ define sq_ratio(len)
|
||||
* determine the 2nd algorithm rate
|
||||
*/
|
||||
loops = max(1, ceil(loops * test_time / tlen));
|
||||
if (loops < 8) {
|
||||
if (loops < 16) {
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" we must expand loop test time to more than %d secs\n",
|
||||
ceil(test_time * (8 / loops)));
|
||||
printf(" we must expand alg2 loop test time to about %d secs\n",
|
||||
ceil(test_time * (16 / loops)));
|
||||
}
|
||||
loops = 8;
|
||||
loops = 16;
|
||||
}
|
||||
tlen = sq_loop(loops, &x);
|
||||
if (config("user_debug") > 3) {
|
||||
@@ -691,7 +805,12 @@ define sq_ratio(len)
|
||||
/*
|
||||
* return alg1 / alg2 rate ratio
|
||||
*/
|
||||
return (alg1_rate / alg2_rate);
|
||||
ret = alg1_rate / alg2_rate;
|
||||
if (config("user_debug") > 2) {
|
||||
printf("\tprecise ratio is: %.f sq_ratio will return: %.3f\n",
|
||||
alg1_rate / alg2_rate, ret);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -713,30 +832,40 @@ define best_sq2()
|
||||
{
|
||||
local ratio; /* previously calculated alg1/alg2 ratio */
|
||||
local low; /* low loop value tested */
|
||||
local high; /* low loop value tested */
|
||||
local high; /* high loop value tested */
|
||||
local mid; /* between low and high */
|
||||
local best_val; /* value found with ratio closest to unity */
|
||||
local best_ratio; /* cloest ratio found to unity */
|
||||
local expand; /* how fast to expand the length */
|
||||
|
||||
/*
|
||||
* setup
|
||||
*/
|
||||
test_time = 15.0;
|
||||
if (config("user_debug") > 0) {
|
||||
printf("will start with loop test time of %d secs\n", test_time);
|
||||
printf("WARNING: This tool may not be computing the correct best value\n");
|
||||
test_time = 5.0;
|
||||
printf("The best_sq2() function will take a LONG time to run!\n");
|
||||
printf("It is important that best_sq2() run on an othwewise idle host!\n");
|
||||
if (config("user_debug") <= 0) {
|
||||
printf("To monitor progress, set user_debug to 2: "
|
||||
"config(\"user_debug\", 2)\n");
|
||||
}
|
||||
printf("Starting with loop test time of %d secs\n", test_time);
|
||||
|
||||
/*
|
||||
* firewall - must have a >1 ratio for the initial length
|
||||
*/
|
||||
high = 16;
|
||||
high = 8;
|
||||
best_val = high;
|
||||
if (config("user_debug") > 0) {
|
||||
printf("testing square alg1/alg2 ratio for len = %d\n", high);
|
||||
}
|
||||
ratio = sq_ratio(high);
|
||||
best_ratio = ratio;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" square alg1/alg2 ratio = %.3f\n", ratio);
|
||||
}
|
||||
if (ratio <= 1.0) {
|
||||
quit "best_sq2: tests imply config(\"sq2\") should be < 4";
|
||||
if (ratio < 1.0) {
|
||||
quit "best_sq2: test implies sq2 < 16, which seems bogus";
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -749,32 +878,75 @@ define best_sq2()
|
||||
* We will multiplicatively expand our test level until
|
||||
* the ratio drops below 1.0.
|
||||
*/
|
||||
expand = ((ratio >= 3.5) ? 16 : 2^round(ratio));
|
||||
expand = 2;
|
||||
low = high;
|
||||
high *= expand;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" expand the next test range by a factor of %d\n",
|
||||
expand);
|
||||
expand);
|
||||
}
|
||||
|
||||
/*
|
||||
* determine the alg1/alg2 test ratio for this new length
|
||||
*/
|
||||
if (high >= 2^31) {
|
||||
quit "best_sq2: tests imply config(\"sq2\") should be >= 2^31";
|
||||
quit "best_sq2: tests imply sq2 >= 2^31, which seems bogus";
|
||||
}
|
||||
if (config("user_debug") > 0) {
|
||||
printf("testing square alg1/alg2 ratio for len = %d\n", high);
|
||||
}
|
||||
ratio = sq_ratio(high);
|
||||
if (abs(ratio - 1.0) < abs(best_ratio - 1.0)) {
|
||||
best_val = high;
|
||||
best_ratio = ratio;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" len %d has a new cloest ratio to unity: %.6f\n",
|
||||
best_val, best_ratio);
|
||||
}
|
||||
}
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" square alg1/alg2 ratio = %.3f\n", ratio);
|
||||
}
|
||||
} while (ratio >= 1.0);
|
||||
} while (ratio > 1.0);
|
||||
|
||||
/*
|
||||
* If we previously expanded more than by a factor of 2, then
|
||||
* we may have jumped over the crossover point. So now
|
||||
* drop down powers of two until the ratio is again >= 1.0
|
||||
*/
|
||||
if (expand > 2) {
|
||||
do {
|
||||
|
||||
/*
|
||||
* contract by 2
|
||||
*/
|
||||
high /= 2;
|
||||
low = high / 2;
|
||||
if (config("user_debug") > 0) {
|
||||
printf("retesting multiply alg1/alg2 ratio for len = %d\n",
|
||||
high);
|
||||
}
|
||||
ratio = mul_ratio(high);
|
||||
if (abs(ratio - 1.0) < abs(best_ratio - 1.0)) {
|
||||
best_val = high;
|
||||
best_ratio = ratio;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" len %d has a new cloest ratio to unity: %.6f\n",
|
||||
best_val, best_ratio);
|
||||
}
|
||||
}
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" multiply alg1/alg2 ratio = %.6f\n", ratio);
|
||||
}
|
||||
|
||||
} while (ratio <= 1.0);
|
||||
|
||||
/* now that the ratio flipped again, use the previous range */
|
||||
low = high;
|
||||
high = high * 2;
|
||||
}
|
||||
if (config("user_debug") > 0) {
|
||||
printf("alg1/alg2 ratio now < 1.0, starting binary search "
|
||||
"between %d and %d\n",
|
||||
low, high);
|
||||
printf("Starting binary search between %d and %d\n", low, high);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -783,41 +955,71 @@ define best_sq2()
|
||||
while (low+1 < high) {
|
||||
|
||||
/* try the mid-point */
|
||||
mid = int((low+high)/2);
|
||||
if (config("user_debug") > 0) {
|
||||
printf("testing square alg1/alg2 ratio for len = %d\n",
|
||||
int((low+high)/2));
|
||||
printf("testing square alg1/alg2 ratio for len = %d\n", mid);
|
||||
}
|
||||
ratio = sq_ratio(mid);
|
||||
if (abs(ratio - 1.0) < abs(best_ratio - 1.0)) {
|
||||
best_val = mid;
|
||||
best_ratio = ratio;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" len %d has a new cloest ratio to unity: %.6f\n",
|
||||
best_val, best_ratio);
|
||||
}
|
||||
}
|
||||
ratio = sq_ratio(int((low+high)/2));
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" square alg1/alg2 ratio = %.3f\n", ratio);
|
||||
printf(" len %d square alg1/alg2 ratio = %.6f\n", mid, ratio);
|
||||
}
|
||||
|
||||
/* stop search if near unity */
|
||||
if (close_to_one(ratio)) {
|
||||
low = mid;
|
||||
high = mid;
|
||||
if (config("user_debug") > 0) {
|
||||
printf("\twe are close enough to unity ratio at: %d\n", mid);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/* bump lower range up if we went over */
|
||||
if (ratio >= 1.0) {
|
||||
if (ratio > 1.0) {
|
||||
if (config("user_debug") > 2) {
|
||||
printf("\tmove low from %d up to %d\n",
|
||||
low, int((low+high)/2));
|
||||
low, mid);
|
||||
}
|
||||
low = int((low+high)/2);
|
||||
low = mid;
|
||||
|
||||
/* drop higher range down if we went under */
|
||||
} else {
|
||||
if (config("user_debug") > 2) {
|
||||
printf("\tmove high from %d down to %d\n",
|
||||
high, int((low+high)/2));
|
||||
high, mid);
|
||||
}
|
||||
high = int((low+high)/2);
|
||||
high = mid;
|
||||
}
|
||||
|
||||
/* report on test loop progress */
|
||||
if (config("user_debug") > 1) {
|
||||
printf("\tsetting low: %d high: %d diff: %d\n",
|
||||
low, high, high-low);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* return on the suggested config("sq2") value
|
||||
*/
|
||||
mid = int((low+high)/2);
|
||||
if (config("user_debug") > 0) {
|
||||
printf("best value of config(\"sq2\") is %d\n",
|
||||
(ratio >= 1.0) ? high : low);
|
||||
printf("Best value for square is near %d\n", best_val);
|
||||
printf("Best square alg1/alg2 ratio is: %.6f\n", best_ratio);
|
||||
printf("We suggest placing this line in your .calcrc:\n");
|
||||
printf("config(\"sq2\", %d),;\n", best_val);
|
||||
printf("WARNING: It is believed that the output "
|
||||
"of this resource file is bogus!\n");
|
||||
printf("WARNING: You may NOT wish to follow the above suggeston.\n");
|
||||
}
|
||||
return ((ratio >= 1.0) ? high : low);
|
||||
return mid;
|
||||
}
|
||||
|
||||
|
||||
@@ -968,6 +1170,7 @@ define pow_ratio(len)
|
||||
local alg1_rate; /* loop rate of 1st algorithm */
|
||||
local alg2_rate; /* loop rate of 2nd algorithm */
|
||||
local ex; /* exponent to use in pow_loop() */
|
||||
local ret; /* return ratio, or 1.0 */
|
||||
local i;
|
||||
|
||||
/*
|
||||
@@ -990,7 +1193,7 @@ define pow_ratio(len)
|
||||
/*
|
||||
* setup
|
||||
*/
|
||||
ex = 5;
|
||||
ex = 7;
|
||||
|
||||
/*
|
||||
* initialize x, the values we will pmod
|
||||
@@ -1026,12 +1229,12 @@ define pow_ratio(len)
|
||||
* determine the 1st algorithm rate
|
||||
*/
|
||||
loops = max(1, ceil(loops * test_time / tlen));
|
||||
if (loops < 8) {
|
||||
if (loops < 16) {
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" we must expand loop test time to more than %d secs\n",
|
||||
ceil(test_time * (8 / loops)));
|
||||
printf(" we must expand alg1 loop test time to about %d secs\n",
|
||||
ceil(test_time * (16 / loops)));
|
||||
}
|
||||
loops = 8;
|
||||
loops = 16;
|
||||
}
|
||||
tlen = pow_loop(loops, &x, ex);
|
||||
if (config("user_debug") > 3) {
|
||||
@@ -1070,12 +1273,12 @@ define pow_ratio(len)
|
||||
* determine the 2nd algorithm rate
|
||||
*/
|
||||
loops = max(1, ceil(loops * test_time / tlen));
|
||||
if (loops < 8) {
|
||||
if (loops < 16) {
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" we must expand loop test time to more than %d secs\n",
|
||||
ceil(test_time * (8 / loops)));
|
||||
printf(" we must expand alg2 loop test time to about %d secs\n",
|
||||
ceil(test_time * (16 / loops)));
|
||||
}
|
||||
loops = 8;
|
||||
loops = 16;
|
||||
}
|
||||
tlen = pow_loop(loops, &x, ex);
|
||||
if (config("user_debug") > 3) {
|
||||
@@ -1104,7 +1307,12 @@ define pow_ratio(len)
|
||||
/*
|
||||
* return alg1 / alg2 rate ratio
|
||||
*/
|
||||
return (alg1_rate / alg2_rate);
|
||||
ret = alg1_rate / alg2_rate;
|
||||
if (config("user_debug") > 2) {
|
||||
printf("\tprecise ratio is: %.f pow_ratio will return: %.3f\n",
|
||||
alg1_rate / alg2_rate, ret);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -1126,17 +1334,25 @@ define best_pow2()
|
||||
{
|
||||
local ratio; /* previously calculated alg1/alg2 ratio */
|
||||
local low; /* low loop value tested */
|
||||
local high; /* low loop value tested */
|
||||
local high; /* high loop value tested */
|
||||
local mid; /* between low and high */
|
||||
local best_val; /* value found with ratio closest to unity */
|
||||
local best_ratio; /* cloest ratio found to unity */
|
||||
local expand; /* how fast to expand the length */
|
||||
local looped; /* 1 ==> we have expanded lengths before */
|
||||
|
||||
/*
|
||||
* setup
|
||||
*/
|
||||
test_time = 15.0;
|
||||
if (config("user_debug") > 0) {
|
||||
printf("will start with loop test time of %d secs\n", test_time);
|
||||
printf("WARNING: This tool may not be computing the correct best value\n");
|
||||
test_time = 60.0;
|
||||
printf("The best_pow2() function will take a LONG time to run!\n");
|
||||
printf("It is important that best_pow2() run on an othwewise idle host!\n");
|
||||
if (config("user_debug") <= 0) {
|
||||
printf("To monitor progress, set user_debug to 2: "
|
||||
"config(\"user_debug\", 2)\n");
|
||||
}
|
||||
printf("Starting with loop test time of %d secs\n", test_time);
|
||||
|
||||
/*
|
||||
* firewall - must have a >1.02 ratio for the initial length
|
||||
@@ -1147,12 +1363,22 @@ define best_pow2()
|
||||
*/
|
||||
low = 4;
|
||||
high = 4;
|
||||
best_val = high;
|
||||
best_ratio = 1e10; /* not a real value */
|
||||
do {
|
||||
high *= 4;
|
||||
if (config("user_debug") > 0) {
|
||||
printf("testing pmod alg1/alg2 ratio for len = %d\n", high);
|
||||
}
|
||||
ratio = pow_ratio(high);
|
||||
if (abs(ratio - 1.0) < abs(best_ratio - 1.0)) {
|
||||
best_val = high;
|
||||
best_ratio = ratio;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" len %d has a new cloest ratio to unity: %.6f\n",
|
||||
best_val, best_ratio);
|
||||
}
|
||||
}
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" pmod alg1/alg2 ratio = %.3f\n", ratio);
|
||||
if (ratio > 1.0 && ratio <= 1.02) {
|
||||
@@ -1199,20 +1425,27 @@ define best_pow2()
|
||||
* determine the alg1/alg2 test ratio for this new length
|
||||
*/
|
||||
if (high >= 2^31) {
|
||||
quit "best_pow2: tests imply config(\"pow2\") should be >= 2^31";
|
||||
quit "best_pow2: test implies pow2 >= 2^31, which seems bogus";
|
||||
}
|
||||
if (config("user_debug") > 0) {
|
||||
printf("testing pmod alg1/alg2 ratio for len = %d\n", high);
|
||||
}
|
||||
ratio = pow_ratio(high);
|
||||
if (abs(ratio - 1.0) < abs(best_ratio - 1.0)) {
|
||||
best_val = high;
|
||||
best_ratio = ratio;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" len %d has a new cloest ratio to unity: %.6f\n",
|
||||
best_val, best_ratio);
|
||||
}
|
||||
}
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" pmod alg1/alg2 ratio = %.3f\n", ratio);
|
||||
printf(" pmod alg1/alg2 ratio = %.6f\n", ratio);
|
||||
}
|
||||
looped = 1;
|
||||
} while (ratio >= 1.0);
|
||||
} while (ratio > 1.0);
|
||||
if (config("user_debug") > 0) {
|
||||
printf("alg1/alg2 ratio now < 1.0, starting binary search "
|
||||
"between %d and %d\n", low, high);
|
||||
printf("Starting binary search between %d and %d\n", low, high);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1221,39 +1454,69 @@ define best_pow2()
|
||||
while (low+1 < high) {
|
||||
|
||||
/* try the mid-point */
|
||||
mid = int((low+high)/2);
|
||||
if (config("user_debug") > 0) {
|
||||
printf("testing pmod alg1/alg2 ratio for len = %d\n",
|
||||
int((low+high)/2));
|
||||
printf("testing pow2 alg1/alg2 ratio for len = %d\n", mid);
|
||||
}
|
||||
ratio = pow_ratio(mid);
|
||||
if (abs(ratio - 1.0) < abs(best_ratio - 1.0)) {
|
||||
best_val = mid;
|
||||
best_ratio = ratio;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" len %d has a new cloest ratio to unity: %.6f\n",
|
||||
best_val, best_ratio);
|
||||
}
|
||||
}
|
||||
ratio = pow_ratio(int((low+high)/2));
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" pmod alg1/alg2 ratio = %.3f\n", ratio);
|
||||
printf(" len %d pmod alg1/alg2 ratio = %.6f\n", mid, ratio);
|
||||
}
|
||||
|
||||
/* stop search if near unity */
|
||||
if (close_to_one(ratio)) {
|
||||
low = mid;
|
||||
high = mid;
|
||||
if (config("user_debug") > 0) {
|
||||
printf("\twe are close enough to unity ratio at: %d\n", mid);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/* bump lower range up if we went over */
|
||||
if (ratio >= 1.0) {
|
||||
if (ratio > 1.0) {
|
||||
if (config("user_debug") > 2) {
|
||||
printf("\tmove low from %d up to %d\n",
|
||||
low, int((low+high)/2));
|
||||
low, mid);
|
||||
}
|
||||
low = int((low+high)/2);
|
||||
low = mid;
|
||||
|
||||
/* drop higher range down if we went under */
|
||||
} else {
|
||||
if (config("user_debug") > 2) {
|
||||
printf("\tmove high from %d down to %d\n",
|
||||
high, int((low+high)/2));
|
||||
high, mid);
|
||||
}
|
||||
high = int((low+high)/2);
|
||||
high = mid;
|
||||
}
|
||||
|
||||
/* report on test loop progress */
|
||||
if (config("user_debug") > 1) {
|
||||
printf("\tsetting low: %d high: %d diff: %d\n",
|
||||
low, high, high-low);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* return on the suggested config("pow2") value
|
||||
*/
|
||||
mid = int((low+high)/2);
|
||||
if (config("user_debug") > 0) {
|
||||
printf("best value of config(\"pow2\") is %d\n",
|
||||
(ratio >= 1.0) ? high : low);
|
||||
printf("Best value for pmod is near %d\n", best_val);
|
||||
printf("Best pmod alg1/alg2 ratio is: %.6f\n", best_ratio);
|
||||
printf("We suggest placing this line in your .calcrc:\n");
|
||||
printf("config(\"pow2\", %d),;\n", best_val);
|
||||
printf("WARNING: It is believed that the output "
|
||||
"of this resource file is bogus!\n");
|
||||
printf("WARNING: You may NOT wish to follow the above suggeston.\n");
|
||||
}
|
||||
return ((ratio >= 1.0) ? high : low);
|
||||
return mid;
|
||||
}
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: beer.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/beer.cal,v $
|
||||
*
|
||||
* Under source code control: 1996/11/13 13:21:05
|
||||
* File existed as early as: 1996
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: bernoulli.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/bernoulli.cal,v $
|
||||
*
|
||||
* Under source code control: 1991/09/30 11:18:41
|
||||
* File existed as early as: 1991
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.4 $
|
||||
* @(#) $Id: bernpoly.cal,v 30.4 2013/08/18 20:01:53 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/bernpoly.cal,v $
|
||||
*
|
||||
* Under source code control: 2013/08/11 01:31:28
|
||||
* File existed as early as: 2013
|
||||
*/
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: bigprime.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/bigprime.cal,v $
|
||||
*
|
||||
* Under source code control: 1991/05/22 21:56:32
|
||||
* File existed as early as: 1991
|
||||
*
|
||||
|
@@ -16,10 +16,6 @@
|
||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# @(#) $Revision: 30.1 $
|
||||
# @(#) $Id: bindings,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/bin/calc/cal/RCS/bindings,v $
|
||||
#
|
||||
# Under source code control: 1993/05/02 20:09:19
|
||||
# File existed as early as: 1993
|
||||
#
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.4 $
|
||||
* @(#) $Id: brentsolve.cal,v 30.4 2013/08/18 20:01:53 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/brentsolve.cal,v $
|
||||
*
|
||||
* Under source code control: 2013/08/11 01:31:28
|
||||
* File existed as early as: 2013
|
||||
*/
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: chi.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/chi.cal,v $
|
||||
*
|
||||
* Under source code control: 2001/03/27 14:10:11
|
||||
* File existed as early as: 2001
|
||||
*
|
||||
|
@@ -19,10 +19,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: chrem.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/chrem.cal,v $
|
||||
*
|
||||
* Under source code control: 1992/09/26 01:00:47
|
||||
* File existed as early as: 1992
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.4 $
|
||||
* @(#) $Id: constants.cal,v 30.4 2013/08/18 20:01:53 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/constants.cal,v $
|
||||
*
|
||||
* Under source code control: 2013/08/11 01:31:28
|
||||
* File existed as early as: 2013
|
||||
*/
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.2 $
|
||||
* @(#) $Id: deg.cal,v 30.2 2010/09/02 06:01:14 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/deg.cal,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:50:33
|
||||
* File existed as early as: before 1990
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.2 $
|
||||
* @(#) $Id: dms.cal,v 30.2 2010/09/02 06:14:16 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/dms.cal,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:50:33
|
||||
* File existed as early as: before 1990
|
||||
*
|
||||
|
@@ -16,10 +16,6 @@
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*
|
||||
* @(#) $Revision: 30.2 $
|
||||
* @(#) $Id: dotest.cal,v 30.2 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/dotest.cal,v $
|
||||
*
|
||||
* This file is not covered under version 2.1 of the GNU LGPL.
|
||||
*
|
||||
* Under source dotest_code control: 2006/03/08 05:54:09
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: ellip.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/ellip.cal,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:50:33
|
||||
* File existed as early as: before 1990
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.4 $
|
||||
* @(#) $Id: factorial.cal,v 30.4 2013/08/18 20:01:53 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/factorial.cal,v $
|
||||
*
|
||||
* Under source code control: 2013/08/11 01:31:28
|
||||
* File existed as early as: 2013
|
||||
*/
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.4 $
|
||||
* @(#) $Id: factorial2.cal,v 30.4 2013/08/18 20:01:53 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/factorial2.cal,v $
|
||||
*
|
||||
* Under source code control: 2013/08/11 01:31:28
|
||||
* File existed as early as: 2013
|
||||
*/
|
||||
|
@@ -8,10 +8,6 @@
|
||||
* operation "function" must be first; calc doesn't care how many more
|
||||
* arguments there actually are.
|
||||
*
|
||||
* @(#) $Revision: 30.3 $
|
||||
* @(#) $Id: gvec.cal,v 30.3 2011/05/23 23:00:55 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/gvec.cal,v $
|
||||
*
|
||||
* Under source code control: 2011/03/31 17:54:55
|
||||
* File existed as early as: 2010
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: hello.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/hello.cal,v $
|
||||
*
|
||||
* Under source code control: 1996/11/13 13:25:43
|
||||
* File existed as early as: 1996
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.2 $
|
||||
* @(#) $Id: hms.cal,v 30.2 2010/09/02 06:14:16 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/hms.cal,v $
|
||||
*
|
||||
* Under source code control: 2010/09/01 17:14:55
|
||||
* File existed as early as: 2010
|
||||
*
|
||||
|
88
cal/infinities.cal
Normal file
88
cal/infinities.cal
Normal file
@@ -0,0 +1,88 @@
|
||||
/*
|
||||
* infinities - handle infinities symbolically, a little helper file
|
||||
*
|
||||
* Copyright (C) 2013 Christoph Zurnieden
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||
* Public License for more details.
|
||||
*
|
||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
static resource_debug_level;
|
||||
resource_debug_level = config("resource_debug", 0);
|
||||
|
||||
|
||||
define isinfinite(x)
|
||||
{
|
||||
if (isstr(x)) {
|
||||
if (strncmp(x, "cinf", 4) == 0
|
||||
|| strncmp(x, "pinf", 4) == 0 || strncmp(x, "ninf", 4) == 0)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
define iscinf(x)
|
||||
{
|
||||
if (isstr(x)) {
|
||||
if (strncmp(x, "cinf", 4) == 0)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
define ispinf(x)
|
||||
{
|
||||
if (isstr(x)) {
|
||||
if (strncmp(x, "pinf", 4) == 0)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
define isninf(x)
|
||||
{
|
||||
if (isstr(x)) {
|
||||
if (strncmp(x, "ninf", 4) == 0)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
define cinf()
|
||||
{
|
||||
return "cinf";
|
||||
}
|
||||
|
||||
define ninf()
|
||||
{
|
||||
return "ninf";
|
||||
}
|
||||
|
||||
define pinf()
|
||||
{
|
||||
return "pinf";
|
||||
}
|
||||
|
||||
|
||||
config("resource_debug", resource_debug_level),;
|
||||
if (config("resource_debug") & 3) {
|
||||
print "isinfinite(x)";
|
||||
print "iscinf(x)";
|
||||
print "ispinf(x)";
|
||||
print "isninf(x)";
|
||||
print "cinf()";
|
||||
print "ninf()";
|
||||
print "pinf()";
|
||||
}
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: intfile.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/intfile.cal,v $
|
||||
*
|
||||
* Under source code control: 2001/03/31 08:13:11
|
||||
* File existed as early as: 2001
|
||||
*
|
||||
|
728
cal/intnum.cal
Normal file
728
cal/intnum.cal
Normal file
@@ -0,0 +1,728 @@
|
||||
/*
|
||||
* intnum - implementation of tanhsinh- and Gauss-Legendre quadrature
|
||||
*
|
||||
* Copyright (C) 2013 Christoph Zurnieden
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||
* Public License for more details.
|
||||
*
|
||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
static resource_debug_level;
|
||||
resource_debug_level = config("resource_debug", 0);
|
||||
|
||||
|
||||
read -once infinities;
|
||||
|
||||
static __CZ__tanhsinh_x;
|
||||
static __CZ__tanhsinh_w;
|
||||
static __CZ__tanhsinh_order;
|
||||
static __CZ__tanhsinh_prec;
|
||||
|
||||
define quadtsdeletenodes()
|
||||
{
|
||||
free(__CZ__tanhsinh_x);
|
||||
free(__CZ__tanhsinh_w);
|
||||
free(__CZ__tanhsinh_order);
|
||||
free(__CZ__tanhsinh_prec);
|
||||
}
|
||||
|
||||
define quadtscomputenodes(order, expo, eps)
|
||||
{
|
||||
local t cht sht chp sum k PI places;
|
||||
local h t0 x w;
|
||||
if (__CZ__tanhsinh_order == order && __CZ__tanhsinh_prec == eps)
|
||||
return 1;
|
||||
__CZ__tanhsinh_order = order;
|
||||
__CZ__tanhsinh_prec = eps;
|
||||
__CZ__tanhsinh_x = list();
|
||||
__CZ__tanhsinh_w = list();
|
||||
/* The tanhsinh algorithm needs a slightly higher precision than G-L */
|
||||
eps = epsilon(eps * 1e-2);
|
||||
places = highbit(1 + int (1 / epsilon())) +1;
|
||||
PI = pi();
|
||||
sum = 0;
|
||||
t0 = 2 ^ (-expo);
|
||||
h = 2 * t0;
|
||||
/*
|
||||
* The author wanted to use the mpmath trick here which was
|
||||
* advertised---and reasonably so!---to be faster. Didn't work out
|
||||
* so well with calc.
|
||||
* PI4 = PI/4;
|
||||
* expt0 = bround(exp(t0),places);
|
||||
* a = bround( PI4 * expt0,places);
|
||||
* b = bround(PI4 / expt0,places);
|
||||
* udelta = bround(exp(h),places);
|
||||
* urdelta = bround(1/udelta,places);
|
||||
*/
|
||||
/* make use of x(-t) = -x(t), w(-t) = w(t) */
|
||||
for (k = 0; k < 20 * order + 1; k++) {
|
||||
/*
|
||||
* x = tanh(pi/2 * sinh(t))
|
||||
* w = pi/2 * cosh(t) / cosh(pi/2 * sinh(t))^2
|
||||
*/
|
||||
t = bround(t0 + k * h, places);
|
||||
|
||||
cht = bround(cosh(t), places);
|
||||
sht = bround(sinh(t), places);
|
||||
chp = bround(cosh(0.5 * PI * sht), places);
|
||||
x = bround(tanh(0.5 * PI * sht), places);
|
||||
w = bround((PI * h * cht) / (2 * chp ^ 2), places);
|
||||
/*
|
||||
* c = bround(exp(a-b),places);
|
||||
* d = bround(1/c,places);
|
||||
* co =bround( (c+d)/2,places);
|
||||
* si =bround( (c-d)/2,places);
|
||||
* x = bround(si / co,places);
|
||||
* w = bround((a+b) / co^2,places);
|
||||
*/
|
||||
if (abs(x - 1) <= eps)
|
||||
break;
|
||||
|
||||
append(__CZ__tanhsinh_x, x);
|
||||
append(__CZ__tanhsinh_w, w);
|
||||
/*
|
||||
* a *= udelta;
|
||||
* b *= urdelta;
|
||||
*/
|
||||
}
|
||||
|
||||
/* Normalize the weights to make them add up to 2 (two) */
|
||||
/*
|
||||
* for(k=0;k < size(__CZ__tanhsinh_w);k++)
|
||||
* sum = bround(sum + __CZ__tanhsinh_w[k],places);
|
||||
* sum *= 2;
|
||||
* for(k=0;k < size(__CZ__tanhsinh_w);k++)
|
||||
* __CZ__tanhsinh_w[k] = bround(2.0 * __CZ__tanhsinh_w[k] / sum,places);
|
||||
*/
|
||||
|
||||
epsilon(eps);
|
||||
return 1;
|
||||
}
|
||||
|
||||
define quadtscore(a, b, n)
|
||||
{
|
||||
local k c d order eps places sum ret x x1 x2 xm w w1 w2 m sizel;
|
||||
|
||||
eps = epsilon(epsilon() * 1e-2);
|
||||
places = highbit(1 + int (1 / epsilon())) +1;
|
||||
m = int (4 + max(0, ln(places / 30.0) / ln(2))) + 2;
|
||||
if (!isnull(n)) {
|
||||
order = n;
|
||||
m = ilog(order / 3, 2) + 1;
|
||||
} else
|
||||
order = 3 * 2 ^ (m - 1);
|
||||
|
||||
quadtscomputenodes(order, m, epsilon());
|
||||
sizel = size(__CZ__tanhsinh_w);
|
||||
|
||||
if (isinfinite(a) || isinfinite(b)) {
|
||||
/*
|
||||
* x
|
||||
* t = ------------
|
||||
* 2
|
||||
* sqrt(1 - y )
|
||||
*/
|
||||
if (isninf(a) && ispinf(b)) {
|
||||
for (k = 0; k < sizel; k++) {
|
||||
x1 = __CZ__tanhsinh_x[k];
|
||||
x2 = -__CZ__tanhsinh_x[k];
|
||||
w1 = __CZ__tanhsinh_w[k];
|
||||
|
||||
x = bround(x1 * (1 - x1 ^ 2) ^ (-1 / 2), places);
|
||||
xm = bround(x2 * (1 - x2 ^ 2) ^ (-1 / 2), places);
|
||||
w = bround(w1 * (((1 - x1 ^ 2) ^ (-1 / 2)) / (1 - x1 ^ 2)),
|
||||
places);
|
||||
w2 = bround(w1 * (((1 - x2 ^ 2) ^ (-1 / 2)) / (1 - x2 ^ 2)),
|
||||
places);
|
||||
sum += bround(w * f(x), places);
|
||||
sum += bround(w2 * f(xm), places);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* 1
|
||||
* t = - - + b + 1
|
||||
* x
|
||||
*/
|
||||
else if (isninf(a) && !iscinf(b)) {
|
||||
for (k = 0; k < sizel; k++) {
|
||||
x1 = __CZ__tanhsinh_x[k];
|
||||
x2 = -__CZ__tanhsinh_x[k];
|
||||
w1 = __CZ__tanhsinh_w[k];
|
||||
|
||||
x = bround((b + 1) - (2 / (x1 + 1)), places);
|
||||
xm = bround((b + 1) - (2 / (x2 + 1)), places);
|
||||
w = bround(w1 * (1 / 2 * (2 / (x1 + 1)) ^ 2), places);
|
||||
w2 = bround(w1 * (1 / 2 * (2 / (x2 + 1)) ^ 2), places);
|
||||
sum += bround(w * f(x), places);
|
||||
sum += bround(w2 * f(xm), places);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* 1
|
||||
* t = - + a - 1
|
||||
* x
|
||||
*/
|
||||
else if (!iscinf(a) && ispinf(b)) {
|
||||
for (k = 0; k < sizel; k++) {
|
||||
x1 = __CZ__tanhsinh_x[k];
|
||||
x2 = -__CZ__tanhsinh_x[k];
|
||||
w1 = __CZ__tanhsinh_w[k];
|
||||
x = bround((a - 1) + (2 / (x1 + 1)), places);
|
||||
xm = bround((a - 1) + (2 / (x2 + 1)), places);
|
||||
w = bround(w1 * (((1 / 2) * (2 / (x1 + 1)) ^ 2)), places);
|
||||
w2 = bround(w1 * (((1 / 2) * (2 / (x2 + 1)) ^ 2)), places);
|
||||
sum += bround(w * f(x), places);
|
||||
sum += bround(w2 * f(xm), places);
|
||||
}
|
||||
} else if (isninf(a) || isninf(b)) {
|
||||
/*TODO: swap(a,b) and negate(w)? Lookup! */
|
||||
return newerror("quadtscore: reverse limits?");
|
||||
} else {
|
||||
return
|
||||
newerror("quadtscore: complex infinity not yet implemented");
|
||||
}
|
||||
ret = sum;
|
||||
} else {
|
||||
/* Avoid rounding errors */
|
||||
if (a == -1 && b == 1) {
|
||||
c = 1;
|
||||
d = 0;
|
||||
} else {
|
||||
c = (b - a) / 2;
|
||||
d = (b + a) / 2;
|
||||
}
|
||||
sum = 0;
|
||||
for (k = 0; k < sizel; k++) {
|
||||
sum +=
|
||||
bround(__CZ__tanhsinh_w[k] * f(c * __CZ__tanhsinh_x[k] + d),
|
||||
places);
|
||||
sum +=
|
||||
bround(__CZ__tanhsinh_w[k] * f(c * -__CZ__tanhsinh_x[k] + d),
|
||||
places);
|
||||
}
|
||||
ret = c * sum;
|
||||
}
|
||||
epsilon(eps);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static __CZ__quadts_error;
|
||||
|
||||
define quadts(a, b, points)
|
||||
{
|
||||
local k sp results epsbits nsect interval length segment slope C ;
|
||||
local x1 x2 y1 y2 sum D1 D2 D3 D4;
|
||||
if (param(0) < 2)
|
||||
return newerror("quadts: not enough arguments");
|
||||
epsbits = highbit(1 + int (1 / epsilon())) +1;
|
||||
if (param(0) < 3 || isnull(points)) {
|
||||
/* return as given */
|
||||
return quadtscore(a, b);
|
||||
} else {
|
||||
if ((isinfinite(a) || isinfinite(b))
|
||||
&& (!ismat(points) && !islist(points)))
|
||||
return
|
||||
newerror(strcat
|
||||
("quadts: segments of infinite length ",
|
||||
"are not yet supported"));
|
||||
if (ismat(points) || islist(points)) {
|
||||
sp = size(points);
|
||||
if (sp == 0)
|
||||
return
|
||||
newerror(strcat
|
||||
("quadts: variable 'points` must be a list or ",
|
||||
"1d-matrix of a length > 0"));
|
||||
/* check if all points are numbers */
|
||||
for (k = 0; k < sp; k++) {
|
||||
if (!isnum(points[k]))
|
||||
return
|
||||
newerror(strcat
|
||||
("quadts: elements of 'points` must be",
|
||||
" numbers only"));
|
||||
}
|
||||
/* We have n-1 intervals and a and b, hence n-1 + 2 results */
|
||||
results = mat[sp + 1];
|
||||
if (a != points[0]) {
|
||||
results[0] = quadtscore(a, points[0]);
|
||||
} else {
|
||||
results[0] = 0;
|
||||
}
|
||||
if (sp == 1) {
|
||||
if (b != points[0]) {
|
||||
results[1] = quadtscore(points[0], b);
|
||||
} else {
|
||||
results[1] = 0;
|
||||
}
|
||||
} else {
|
||||
for (k = 1; k < sp; k++) {
|
||||
results[k] = quadtscore(points[k - 1], points[k]);
|
||||
}
|
||||
if (b != points[k - 1]) {
|
||||
results[k] = quadtscore(points[k - 1], b);
|
||||
} else {
|
||||
results[k] = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!isint(points) || points <= 0)
|
||||
return newerror(strcat("quadts: variable 'points` must be a ",
|
||||
"list or a positive integer"));
|
||||
/* Taking "points" as the number of equally spaced intervals */
|
||||
results = mat[points + 1];
|
||||
/* It is easy if a,b lie on the real line */
|
||||
if (isreal(a) && isreal(b)) {
|
||||
length = abs(a - b);
|
||||
segment = length / points;
|
||||
|
||||
for (k = 1; k <= points; k++) {
|
||||
results[k - 1] =
|
||||
quadtscore(a + (k - 1) * segment, a + k * segment);
|
||||
}
|
||||
} else {
|
||||
/* We have at least one complex limit but treat "points" still
|
||||
* as the number of equally spaced intervals on a straight line
|
||||
* connecting a and b. Computing the segments here is a bit
|
||||
* more complicated but not much, it should have been taught in
|
||||
* highschool.
|
||||
* Other contours by way of a list of points */
|
||||
slope = (im(b) - im(a)) / (re(b) - re(a));
|
||||
C = (im(a) + slope) * re(a);
|
||||
length = abs(re(a) - re(b));
|
||||
segment = length / points;
|
||||
|
||||
/* y = mx+C where m is the slope, x is the real part and y the
|
||||
* imaginary part */
|
||||
if(re(a)>re(b))swap(a,b);
|
||||
for (k = re(a); k <= (re(b)); k+=segment) {
|
||||
x1 = slope*(k) + C;
|
||||
results[k] = quadtscore(k + x1 * 1i);
|
||||
}
|
||||
} /* else of isreal */
|
||||
} /* else of ismat|islist */
|
||||
} /* else of isnull(points) */
|
||||
/* With a bit of undeserved luck we have a result by now. */
|
||||
sp = size(results);
|
||||
for (k = 0; k < sp; k++) {
|
||||
sum += results[k];
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
static __CZ__gl_x;
|
||||
static __CZ__gl_w;
|
||||
static __CZ__gl_order;
|
||||
static __CZ__gl_prec;
|
||||
|
||||
define quadglcomputenodes(N)
|
||||
{
|
||||
local places k l x w t1 t2 t3 t4 t5 r tmp;
|
||||
|
||||
if (__CZ__gl_order == N && __CZ__gl_prec == epsilon())
|
||||
return;
|
||||
|
||||
__CZ__gl_x = mat[N];
|
||||
__CZ__gl_w = mat[N];
|
||||
__CZ__gl_order = N;
|
||||
__CZ__gl_prec = epsilon();
|
||||
|
||||
places = highbit(1 + int (1 / epsilon())) +1;
|
||||
|
||||
/*
|
||||
* Compute roots and weights (doing it inline seems to be fastest)
|
||||
* Trick shamelessly stolen from D. Bailey et .al (program "arprec")
|
||||
*/
|
||||
for (k = 1; k <= N//2; k++) {
|
||||
r = bround(cos(pi() * (k - .25) / (N + .5)), places);
|
||||
while (1) {
|
||||
t1 = 1, t2 = 0;
|
||||
for (l = 1; l <= N; l++) {
|
||||
t3 = t2;
|
||||
t2 = t1;
|
||||
t1 = bround(((2 * l - 1) * r * t2 - (l - 1) * t3) / l, places);
|
||||
}
|
||||
t4 = bround(N * (r * t1 - t2) / ((r ^ 2) - 1), places);
|
||||
t5 = r;
|
||||
tmp = t1 / t4;
|
||||
r = r - tmp;
|
||||
if (abs(tmp) <= epsilon())
|
||||
break;
|
||||
}
|
||||
x = r;
|
||||
w = bround(2 / ((1 - r ^ 2) * t4 ^ 2), places);
|
||||
|
||||
__CZ__gl_x[k - 1] = x;
|
||||
__CZ__gl_w[k - 1] = w;
|
||||
__CZ__gl_x[N - k] = -__CZ__gl_x[k - 1];
|
||||
__CZ__gl_w[N - k] = __CZ__gl_w[k - 1];
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
define quadgldeletenodes()
|
||||
{
|
||||
free(__CZ__gl_x);
|
||||
free(__CZ__gl_w);
|
||||
free(__CZ__gl_order);
|
||||
free(__CZ__gl_prec);
|
||||
}
|
||||
|
||||
define quadglcore(a, b, n)
|
||||
{
|
||||
local k c d digs order eps places sum ret err x x1 w w1 m;
|
||||
local phalf x2 px1 spx1 u b1 a1 half;
|
||||
|
||||
eps = epsilon(epsilon() * 1e-2);
|
||||
places = highbit(1 + int (1 / epsilon())) +1;
|
||||
if (!isnull(n))
|
||||
order = n;
|
||||
else {
|
||||
m = int (4 + max(0, ln(places / 30.0) / ln(2))) + 2;
|
||||
order = 3 * 2 ^ (m - 1);
|
||||
}
|
||||
|
||||
|
||||
quadglcomputenodes(order, 1);
|
||||
|
||||
if (isinfinite(a) || isinfinite(b)) {
|
||||
if (isninf(a) && ispinf(b)) {
|
||||
for (k = 0; k < order; k++) {
|
||||
x1 = __CZ__gl_x[k];
|
||||
w1 = __CZ__gl_w[k];
|
||||
|
||||
x = bround(x1 * (1 - x1 ^ 2) ^ (-1 / 2), places);
|
||||
w = bround(w1 * (((1 - x1 ^ 2) ^ (-1 / 2)) / (1 - x1 ^ 2)),
|
||||
places);
|
||||
sum += bround(w * f(x), places);
|
||||
}
|
||||
} else if (isninf(a) && !iscinf(b)) {
|
||||
for (k = 0; k < order; k++) {
|
||||
x1 = __CZ__gl_x[k];
|
||||
w1 = __CZ__gl_w[k];
|
||||
|
||||
x = bround((b + 1) - (2 / (x1 + 1)), places);
|
||||
w = bround(w1 * (1 / 2 * (2 / (x1 + 1)) ^ 2), places);
|
||||
sum += bround(w * f(x), places);
|
||||
}
|
||||
} else if (!iscinf(a) && ispinf(b)) {
|
||||
for (k = 0; k < order; k++) {
|
||||
x1 = __CZ__gl_x[k];
|
||||
w1 = __CZ__gl_w[k];
|
||||
x = bround((a - 1) + (2 / (x1 + 1)), places);
|
||||
w = bround(w1 * (((1 / 2) * (2 / (x1 + 1)) ^ 2)), places);
|
||||
sum += bround(w * f(x), places);
|
||||
}
|
||||
} else if (isninf(a) || isninf(b)) {
|
||||
/*TODO: swap(a,b) and negate(w)? Lookup! */
|
||||
return newerror("quadglcore: reverse limits?");
|
||||
} else
|
||||
return
|
||||
newerror("quadglcore: complex infinity not yet implemented");
|
||||
ret = sum;
|
||||
} else {
|
||||
/* Avoid rounding errors */
|
||||
if (a == -1 && b == 1) {
|
||||
c = 1;
|
||||
d = 0;
|
||||
} else {
|
||||
c = (b - a) / 2;
|
||||
d = (b + a) / 2;
|
||||
}
|
||||
sum = 0;
|
||||
for (k = 0; k < order; k++) {
|
||||
sum += bround(__CZ__gl_w[k] * f(c * __CZ__gl_x[k] + d), places);
|
||||
}
|
||||
ret = c * sum;
|
||||
}
|
||||
epsilon(eps);
|
||||
return ret;
|
||||
}
|
||||
|
||||
define quadgl(a, b, points)
|
||||
{
|
||||
local k sp results epsbits nsect interval length segment slope C x1 y1 x2
|
||||
y2;
|
||||
local sum D1 D2 D3 D4;
|
||||
if (param(0) < 2)
|
||||
return newerror("quadgl: not enough arguments");
|
||||
epsbits = highbit(1 + int (1 / epsilon())) +1;
|
||||
if (isnull(points)) {
|
||||
/* return as given */
|
||||
return quadglcore(a, b);
|
||||
} else {
|
||||
/* But if we could half the time needed to execute a single operation
|
||||
* we could do all of it in just twice that time. */
|
||||
if (isinfinite(a) || isinfinite(b)
|
||||
&& (!ismat(points) && !islist(points)))
|
||||
return
|
||||
newerror(strcat
|
||||
("quadgl: multiple segments of infinite length ",
|
||||
"are not yet supported"));
|
||||
if (ismat(points) || islist(points)) {
|
||||
sp = size(points);
|
||||
if (sp == 0)
|
||||
return
|
||||
newerror(strcat
|
||||
("quadgl: variable 'points` must be a list or ",
|
||||
"1d-matrix of a length > 0"));
|
||||
/* check if all points are numbers */
|
||||
for (k = 0; k < sp; k++) {
|
||||
if (!isnum(points[k]))
|
||||
return
|
||||
newerror(strcat
|
||||
("quadgl: elements of 'points` must be ",
|
||||
"numbers only"));
|
||||
}
|
||||
/* We have n-1 intervals and a and b, hence n-1 + 2 results */
|
||||
results = mat[sp + 1];
|
||||
if (a != points[0]) {
|
||||
results[0] = quadglcore(a, points[0]);
|
||||
} else {
|
||||
results[0] = 0;
|
||||
}
|
||||
if (sp == 1) {
|
||||
if (b != points[0]) {
|
||||
results[1] = quadglcore(points[0], b);
|
||||
} else {
|
||||
results[1] = 0;
|
||||
}
|
||||
} else {
|
||||
for (k = 1; k < sp; k++) {
|
||||
results[k] = quadglcore(points[k - 1], points[k]);
|
||||
}
|
||||
if (b != points[k - 1]) {
|
||||
results[k] = quadglcore(points[k - 1], b);
|
||||
} else {
|
||||
results[k] = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!isint(points) || points <= 0)
|
||||
return newerror(strcat("quadgl: variable 'points` must be a ",
|
||||
"list or a positive integer"));
|
||||
/* Taking "points" as the number of equally spaced intervals */
|
||||
results = mat[points + 1];
|
||||
/* It is easy if a,b lie on the real line */
|
||||
if (isreal(a) && isreal(b)) {
|
||||
length = abs(a - b);
|
||||
segment = length / points;
|
||||
|
||||
for (k = 1; k <= points; k++) {
|
||||
results[k - 1] =
|
||||
quadglcore(a + (k - 1) * segment, a + k * segment);
|
||||
}
|
||||
} else {
|
||||
/* Other contours by way of a list of points */
|
||||
slope = (im(b) - im(a)) / (re(b) - re(a));
|
||||
C = (im(a) + slope) * re(a);
|
||||
length = abs(re(a) - re(b));
|
||||
segment = length / points;
|
||||
|
||||
/* y = mx+C where m is the slope, x is the real part and y the
|
||||
* imaginary part */
|
||||
if(re(a)>re(b))swap(a,b);
|
||||
for (k = re(a); k <= (re(b)); k+=segment) {
|
||||
x1 = slope*(k) + C;
|
||||
results[k] = quadglcore(k + x1 * 1i);
|
||||
}
|
||||
} /* else of isreal */
|
||||
} /* else of ismat|islist */
|
||||
} /* else of isnull(points) */
|
||||
/* With a bit of undeserved luck we have a result by now. */
|
||||
sp = size(results);
|
||||
for (k = 0; k < sp; k++) {
|
||||
sum += results[k];
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
define quad(a, b, points = -1, method = "tanhsinh")
|
||||
{
|
||||
if (isnull(a) || isnull(b) || param(0) < 2)
|
||||
return newerror("quad: both limits must be given");
|
||||
if (isstr(a)) {
|
||||
if (strncmp(a, "cinf", 1) == 0)
|
||||
return
|
||||
newerror(strcat
|
||||
("quad: complex infinity not yet supported, use",
|
||||
" 'pinf' or 'ninf' respectively"));
|
||||
}
|
||||
if (isstr(b)) {
|
||||
if (strncmp(b, "cinf", 1) == 0)
|
||||
return
|
||||
newerror(strcat
|
||||
("quad: complex infinity not yet supported, use",
|
||||
" 'pinf' or 'ninf' respectively"));
|
||||
}
|
||||
|
||||
if (param(0) == 3) {
|
||||
if (isstr(points))
|
||||
method = points;
|
||||
}
|
||||
|
||||
if (strncmp(method, "tanhsinh", 1) == 0) {
|
||||
if (!isstr(points)) {
|
||||
if (points == -1) {
|
||||
return quadts(a, b);
|
||||
} else {
|
||||
return quadts(a, b, points);
|
||||
}
|
||||
} else {
|
||||
return quadts(a, b);
|
||||
}
|
||||
}
|
||||
|
||||
if (strncmp(method, "gausslegendre", 1) == 0) {
|
||||
if (!isstr(points)) {
|
||||
if (points == -1) {
|
||||
return quadgl(a, b);
|
||||
} else {
|
||||
return quadgl(a, b, points);
|
||||
}
|
||||
} else {
|
||||
return quadgl(a, b);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
define makerange(start, end, steps)
|
||||
{
|
||||
local ret k l step C length slope x1 x2 y1 y2;
|
||||
local segment;
|
||||
steps = int (steps);
|
||||
if (steps < 1) {
|
||||
return newerror("makerange: number of steps must be > 0");
|
||||
}
|
||||
if (!isnum(start) || !isnum(end)) {
|
||||
return newerror("makerange: only numbers are supported yet");
|
||||
}
|
||||
if (isreal(start) && isreal(end)) {
|
||||
step = (end - start) / (steps);
|
||||
print step;
|
||||
ret = mat[steps + 1];
|
||||
for (k = 0; k <= steps; k++) {
|
||||
ret[k] = k * step + start;
|
||||
}
|
||||
} else {
|
||||
ret = mat[steps + 1];
|
||||
if (re(start) > re(end)) {
|
||||
swap(start, end);
|
||||
}
|
||||
|
||||
slope = (im(end) - im(start)) / (re(end) - re(start));
|
||||
C = im(start) - slope * re(start);
|
||||
length = abs(re(start) - re(end));
|
||||
segment = length / (steps);
|
||||
|
||||
for (k = re(start), l = 0; k <= (re(end)); k += segment, l++) {
|
||||
x1 = slope * (k) + C;
|
||||
ret[l] = k + x1 * 1i;
|
||||
}
|
||||
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
define makecircle(radius, center, points)
|
||||
{
|
||||
local ret k a b twopi centerx centery;
|
||||
if (!isint(points) || points < 2) {
|
||||
return
|
||||
newerror("makecircle: number of points is not a positive integer");
|
||||
}
|
||||
if (!isnum(center)) {
|
||||
return newerror("makecircle: center does not lie on the complex plane");
|
||||
}
|
||||
if (!isreal(radius) || radius <= 0) {
|
||||
return newerror("makecircle: radius is not a real > 0");
|
||||
}
|
||||
ret = mat[points];
|
||||
twopi = 2 * pi();
|
||||
centerx = re(center);
|
||||
centery = im(center);
|
||||
for (k = 0; k < points; k++) {
|
||||
a = centerx + radius * cos(twopi * k / points);
|
||||
b = centery + radius * sin(twopi * k / points);
|
||||
ret[k] = a + b * 1i;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
define makeellipse(angle, a, b, center, points)
|
||||
{
|
||||
local ret k x y twopi centerx centery;
|
||||
if (!isint(points) || points < 2) {
|
||||
return
|
||||
newerror("makeellipse: number of points is not a positive integer");
|
||||
}
|
||||
if (!isnum(center)) {
|
||||
return
|
||||
newerror("makeellipse: center does not lie on the complex plane");
|
||||
}
|
||||
if (!isreal(a) || a <= 0) {
|
||||
return newerror("makecircle: a is not a real > 0");
|
||||
}
|
||||
if (!isreal(b) || b <= 0) {
|
||||
return newerror("makecircle: b is not a real > 0");
|
||||
}
|
||||
if (!isreal(angle)) {
|
||||
return newerror("makecircle: angle is not a real");
|
||||
}
|
||||
ret = mat[points];
|
||||
twopi = 2 * pi();
|
||||
centerx = re(center);
|
||||
centery = im(center);
|
||||
for (k = 0; k < points; k++) {
|
||||
x = centerx + a * cos(twopi * k / points) * cos(angle)
|
||||
- b * sin(twopi * k / points) * sin(angle);
|
||||
y = centerx + a * cos(twopi * k / points) * sin(angle)
|
||||
+ b * sin(twopi * k / points) * cos(angle);
|
||||
ret[k] = x + y * 1i;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
define makepoints()
|
||||
{
|
||||
local ret k;
|
||||
ret = mat[param(0)];
|
||||
for (k = 0; k < param(0); k++) {
|
||||
if (!isnum(param(k + 1))) {
|
||||
return
|
||||
newerror(strcat
|
||||
("makepoints: parameter number \"", str(k + 1),
|
||||
"\" is not a number"));
|
||||
}
|
||||
ret[k] = param(k + 1);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
config("resource_debug", resource_debug_level),;
|
||||
if (config("resource_debug") & 3) {
|
||||
print "quadtsdeletenodes()";
|
||||
print "quadtscomputenodes(order, expo, eps)";
|
||||
print "quadtscore(a,b,n)";
|
||||
print "quadts(a,b,points)";
|
||||
print "quadglcomputenodes(N)";
|
||||
print "quadgldeletenodes()";
|
||||
print "quadglcore(a,b,n)";
|
||||
print "quadgl(a,b,points)";
|
||||
print "quad(a,b,points=-1,method=\"tanhsinh\")";
|
||||
print "makerange(start, end, steps)";
|
||||
print "makecircle(radius, center, points)";
|
||||
print "makeellipse(angle, a, b, center, points)";
|
||||
print "makepoints(a1,[...])";
|
||||
}
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.4 $
|
||||
* @(#) $Id: lambertw.cal,v 30.4 2013/08/18 20:01:53 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/lambertw.cal,v $
|
||||
*
|
||||
* Under source code control: 2013/08/11 01:31:28
|
||||
* File existed as early as: 2013
|
||||
*/
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.2 $
|
||||
* @(#) $Id: linear.cal,v 30.2 2007/03/17 05:57:42 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/linear.cal,v $
|
||||
*
|
||||
* Under source code control: 2005/12/12 06:41:50
|
||||
* File existed as early as: 2005
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.4 $
|
||||
* @(#) $Id: lnseries.cal,v 30.4 2013/08/18 20:01:53 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/lnseries.cal,v $
|
||||
*
|
||||
* Under source code control: 2013/08/11 01:31:28
|
||||
* File existed as early as: 2013
|
||||
*/
|
||||
|
820
cal/lucas.cal
820
cal/lucas.cal
File diff suppressed because it is too large
Load Diff
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: lucas_chk.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/lucas_chk.cal,v $
|
||||
*
|
||||
* Under source code control: 1991/01/11 05:41:43
|
||||
* File existed as early as: 1991
|
||||
*
|
||||
|
@@ -1,165 +0,0 @@
|
||||
/*
|
||||
* lucas_tbl - lucasian criteria for primality tables
|
||||
*
|
||||
* Copyright (C) 1999 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||
* Public License for more details.
|
||||
*
|
||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: lucas_tbl.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/lucas_tbl.cal,v $
|
||||
*
|
||||
* Under source code control: 1991/01/26 02:43:43
|
||||
* File existed as early as: 1991
|
||||
*
|
||||
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||
*/
|
||||
|
||||
/*
|
||||
* Lucasian criteria for primality
|
||||
*
|
||||
* The following table is taken from:
|
||||
*
|
||||
* "Lucasian Criteria for the Primality of N=h*2^n-1", by Hans Riesel,
|
||||
* Mathematics of Computation, Vol 23 #108, p 872.
|
||||
*
|
||||
* The index of the *_val[] arrays correspond to the v(1) values found
|
||||
* in the table. That is, for v(1) == x:
|
||||
*
|
||||
* D == d_val[x]
|
||||
* a == a_val[x]
|
||||
* b == b_val[x]
|
||||
* r == r_val[x] (r == abs(a^2 - b^2*D))
|
||||
*
|
||||
*
|
||||
* Note that when *_val[i] is not a number, the related v(1) value
|
||||
* is not found in Table 1.
|
||||
*/
|
||||
|
||||
|
||||
trymax = 100;
|
||||
mat d_val[trymax+1];
|
||||
mat a_val[trymax+1];
|
||||
mat b_val[trymax+1];
|
||||
mat r_val[trymax+1];
|
||||
/* v1= 0 INVALID */
|
||||
/* v1= 1 INVALID */
|
||||
/* v1= 2 INVALID */
|
||||
d_val[ 3]= 5; a_val[ 3]= 1; b_val[ 3]=1; r_val[ 3]=4;
|
||||
d_val[ 4]= 3; a_val[ 4]= 1; b_val[ 4]=1; r_val[ 4]=2;
|
||||
d_val[ 5]= 21; a_val[ 5]= 3; b_val[ 5]=1; r_val[ 5]=12;
|
||||
d_val[ 6]= 2; a_val[ 6]= 1; b_val[ 6]=1; r_val[ 6]=1;
|
||||
/* v1= 7 INVALID */
|
||||
d_val[ 8]= 15; a_val[ 8]= 3; b_val[ 8]=1; r_val[ 8]=6;
|
||||
d_val[ 9]= 77; a_val[ 9]= 7; b_val[ 9]=1; r_val[ 9]=28;
|
||||
d_val[10]= 6; a_val[10]= 2; b_val[10]=1; r_val[10]=2;
|
||||
d_val[11]= 13; a_val[11]= 3; b_val[11]=1; r_val[11]=4;
|
||||
d_val[12]= 35; a_val[12]= 5; b_val[12]=1; r_val[12]=10;
|
||||
d_val[13]= 165; a_val[13]=11; b_val[13]=1; r_val[13]=44;
|
||||
/* v1=14 INVALID */
|
||||
d_val[15]= 221; a_val[15]=13; b_val[15]=1; r_val[15]=52;
|
||||
d_val[16]= 7; a_val[16]= 3; b_val[16]=1; r_val[16]=2;
|
||||
d_val[17]= 285; a_val[17]=15; b_val[17]=1; r_val[17]=60;
|
||||
/* v1=18 INVALID */
|
||||
d_val[19]= 357; a_val[19]=17; b_val[19]=1; r_val[19]=68;
|
||||
d_val[20]= 11; a_val[20]= 3; b_val[20]=1; r_val[20]=2;
|
||||
d_val[21]= 437; a_val[21]=19; b_val[21]=1; r_val[21]=76;
|
||||
d_val[22]= 30; a_val[22]= 5; b_val[22]=1; r_val[22]=5;
|
||||
/* v1=23 INVALID */
|
||||
d_val[24]= 143; a_val[24]=11; b_val[24]=1; r_val[24]=22;
|
||||
d_val[25]= 69; a_val[25]= 9; b_val[25]=1; r_val[25]=12;
|
||||
d_val[26]= 42; a_val[26]= 6; b_val[26]=1; r_val[26]=6;
|
||||
d_val[27]= 29; a_val[27]= 5; b_val[27]=1; r_val[27]=4;
|
||||
d_val[28]= 195; a_val[28]=13; b_val[28]=1; r_val[28]=26;
|
||||
d_val[29]= 93; a_val[29]= 9; b_val[29]=1; r_val[29]=12;
|
||||
d_val[30]= 14; a_val[30]= 4; b_val[30]=1; r_val[30]=2;
|
||||
d_val[31]= 957; a_val[31]=29; b_val[31]=1; r_val[31]=116;
|
||||
d_val[32]= 255; a_val[32]=15; b_val[32]=1; r_val[32]=30;
|
||||
d_val[33]=1085; a_val[33]=31; b_val[33]=1; r_val[33]=124;
|
||||
/* v1=34 INVALID */
|
||||
d_val[35]=1221; a_val[35]=33; b_val[35]=1; r_val[35]=132;
|
||||
d_val[36]= 323; a_val[36]=17; b_val[36]=1; r_val[36]=34;
|
||||
d_val[37]=1365; a_val[37]=35; b_val[37]=1; r_val[37]=140;
|
||||
d_val[38]= 10; a_val[38]= 3; b_val[38]=1; r_val[38]=1;
|
||||
d_val[39]=1517; a_val[39]=37; b_val[39]=1; r_val[39]=148;
|
||||
d_val[40]= 399; a_val[40]=19; b_val[40]=1; r_val[40]=38;
|
||||
d_val[41]=1677; a_val[41]=39; b_val[41]=1; r_val[41]=156;
|
||||
d_val[42]= 110; a_val[42]=10; b_val[42]=1; r_val[42]=10;
|
||||
d_val[43]= 205; a_val[43]=15; b_val[43]=1; r_val[43]=20;
|
||||
d_val[44]= 483; a_val[44]=21; b_val[44]=1; r_val[44]=42;
|
||||
d_val[45]=2021; a_val[45]=43; b_val[45]=1; r_val[45]=172;
|
||||
d_val[46]= 33; a_val[46]= 6; b_val[46]=1; r_val[46]=3;
|
||||
/* v1=47 INVALID */
|
||||
d_val[48]= 23; a_val[48]= 5; b_val[48]=1; r_val[48]=2;
|
||||
d_val[49]=2397; a_val[49]=47; b_val[49]=1; r_val[49]=188;
|
||||
d_val[50]= 39; a_val[50]= 6; b_val[50]=1; r_val[50]=3;
|
||||
d_val[51]= 53; a_val[51]= 7; b_val[51]=1; r_val[51]=4;
|
||||
/* v1=52 INVALID */
|
||||
d_val[53]=2805; a_val[53]=51; b_val[53]=1; r_val[53]=204;
|
||||
d_val[54]= 182; a_val[54]=13; b_val[54]=1; r_val[54]=13;
|
||||
d_val[55]=3021; a_val[55]=53; b_val[55]=1; r_val[55]=212;
|
||||
d_val[56]= 87; a_val[56]= 9; b_val[56]=1; r_val[56]=6;
|
||||
d_val[57]=3245; a_val[57]=55; b_val[57]=1; r_val[57]=220;
|
||||
d_val[58]= 210; a_val[58]=14; b_val[58]=1; r_val[58]=14;
|
||||
d_val[59]=3477; a_val[59]=57; b_val[59]=1; r_val[59]=228;
|
||||
d_val[60]= 899; a_val[60]=29; b_val[60]=1; r_val[60]=58;
|
||||
d_val[61]= 413; a_val[61]=21; b_val[61]=1; r_val[61]=28;
|
||||
/* v1=62 INVALID */
|
||||
d_val[63]=3965; a_val[63]=61; b_val[63]=1; r_val[63]=244;
|
||||
d_val[64]=1023; a_val[64]=31; b_val[64]=1; r_val[64]=62;
|
||||
d_val[65]= 469; a_val[65]=21; b_val[65]=1; r_val[65]=28;
|
||||
d_val[66]= 17; a_val[66]= 4; b_val[66]=1; r_val[66]=1;
|
||||
d_val[67]=4485; a_val[67]=65; b_val[67]=1; r_val[67]=260;
|
||||
d_val[68]=1155; a_val[68]=33; b_val[68]=1; r_val[68]=66;
|
||||
d_val[69]=4757; a_val[69]=67; b_val[69]=1; r_val[69]=268;
|
||||
d_val[70]= 34; a_val[70]= 6; b_val[70]=1; r_val[70]=2;
|
||||
d_val[71]=5037; a_val[71]=69; b_val[71]=1; r_val[71]=276;
|
||||
d_val[72]=1295; a_val[72]=35; b_val[72]=1; r_val[72]=70;
|
||||
d_val[73]= 213; a_val[73]=15; b_val[73]=1; r_val[73]=12;
|
||||
d_val[74]= 38; a_val[74]= 6; b_val[74]=1; r_val[74]=2;
|
||||
d_val[75]=5621; a_val[75]=73; b_val[75]=1; r_val[75]=292;
|
||||
d_val[76]=1443; a_val[76]=37; b_val[76]=1; r_val[76]=74;
|
||||
d_val[77]= 237; a_val[77]=15; b_val[77]=1; r_val[77]=12;
|
||||
d_val[78]= 95; a_val[78]=10; b_val[78]=1; r_val[78]=5;
|
||||
/* v1=79 INVALID */
|
||||
d_val[80]=1599; a_val[80]=39; b_val[80]=1; r_val[80]=78;
|
||||
d_val[81]=6557; a_val[81]=79; b_val[81]=1; r_val[81]=316;
|
||||
d_val[82]= 105; a_val[82]=10; b_val[82]=1; r_val[82]=5;
|
||||
d_val[83]= 85; a_val[83]= 9; b_val[83]=1; r_val[83]=4;
|
||||
d_val[84]=1763; a_val[84]=41; b_val[84]=1; r_val[84]=82;
|
||||
d_val[85]=7221; a_val[85]=83; b_val[85]=1; r_val[85]=332;
|
||||
d_val[86]= 462; a_val[86]=21; b_val[86]=1; r_val[86]=21;
|
||||
d_val[87]=7565; a_val[87]=85; b_val[87]=1; r_val[87]=340;
|
||||
d_val[88]= 215; a_val[88]=15; b_val[88]=1; r_val[88]=10;
|
||||
d_val[89]=7917; a_val[89]=87; b_val[89]=1; r_val[89]=348;
|
||||
d_val[90]= 506; a_val[90]=22; b_val[90]=1; r_val[90]=22;
|
||||
d_val[91]=8277; a_val[91]=89; b_val[91]=1; r_val[91]=356;
|
||||
d_val[92]= 235; a_val[92]=15; b_val[92]=1; r_val[92]=10;
|
||||
d_val[93]=8645; a_val[93]=91; b_val[93]=1; r_val[93]=364;
|
||||
d_val[94]= 138; a_val[94]=12; b_val[94]=1; r_val[94]=6;
|
||||
d_val[95]=9021; a_val[95]=93; b_val[95]=1; r_val[95]=372;
|
||||
d_val[96]= 47; a_val[96]= 7; b_val[96]=1; r_val[96]=2;
|
||||
d_val[97]=1045; a_val[97]=33; b_val[97]=1; r_val[97]=44;
|
||||
/* v1=98 INVALID */
|
||||
d_val[99]=9797; a_val[99]=97; b_val[99]=1; r_val[99]=388;
|
||||
d_val[100]= 51; a_val[100]= 7; b_val[100]=1; r_val[100]=2;
|
||||
|
||||
if (config("resource_debug") & 3) {
|
||||
print "d_val[100] defined";
|
||||
print "a_val[100] defined";
|
||||
print "b_val[100] defined";
|
||||
print "r_val[100] defined";
|
||||
}
|
@@ -19,10 +19,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: mersenne.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/mersenne.cal,v $
|
||||
*
|
||||
* Under source code control: 1991/05/22 21:56:36
|
||||
* File existed as early as: 1991
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: mfactor.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/mfactor.cal,v $
|
||||
*
|
||||
* Under source code control: 1996/07/06 06:09:40
|
||||
* File existed as early as: 1996
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: mod.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/mod.cal,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:50:34
|
||||
* File existed as early as: before 1990
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: natnumset.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/natnumset.cal,v $
|
||||
*
|
||||
* Under source code control: 1997/09/07 23:53:51
|
||||
* File existed as early as: 1997
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: pell.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/pell.cal,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:50:34
|
||||
* File existed as early as: before 1990
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: pi.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/pi.cal,v $
|
||||
*
|
||||
* Under source code control: 1991/05/22 21:56:37
|
||||
* File existed as early as: 1991
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: pix.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/pix.cal,v $
|
||||
*
|
||||
* Under source code control: 1996/07/09 03:14:14
|
||||
* File existed as early as: 1996
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: pollard.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/pollard.cal,v $
|
||||
*
|
||||
* Under source code control: 1991/05/22 21:56:37
|
||||
* File existed as early as: 1991
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: poly.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/poly.cal,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:50:35
|
||||
* File existed as early as: before 1990
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: prompt.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/prompt.cal,v $
|
||||
*
|
||||
* Under source code control: 1995/12/18 04:43:25
|
||||
* File existed as early as: 1995
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: psqrt.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/psqrt.cal,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:50:35
|
||||
* File existed as early as: before 1990
|
||||
*
|
||||
|
@@ -20,10 +20,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: qtime.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/qtime.cal,v $
|
||||
*
|
||||
* Under source code control: 1999/10/13 04:10:33
|
||||
* File existed as early as: 1999
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.2 $
|
||||
* @(#) $Id: quat.cal,v 30.2 2013/08/11 08:41:38 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/quat.cal,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:50:35
|
||||
* File existed as early as: before 1990
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: randbitrun.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/randbitrun.cal,v $
|
||||
*
|
||||
* Under source code control: 1995/02/13 03:43:11
|
||||
* File existed as early as: 1995
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: randmprime.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/randmprime.cal,v $
|
||||
*
|
||||
* Under source code control: 1994/03/14 23:11:21
|
||||
* File existed as early as: 1994
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: randombitrun.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/randombitrun.cal,v $
|
||||
*
|
||||
* Under source code control: 1995/02/13 03:43:11
|
||||
* File existed as early as: 1995
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: randomrun.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/randomrun.cal,v $
|
||||
*
|
||||
* Under source code control: 1997/02/19 03:35:59
|
||||
* File existed as early as: 1997
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: randrun.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/randrun.cal,v $
|
||||
*
|
||||
* Under source code control: 1995/02/12 20:00:06
|
||||
* File existed as early as: 1995
|
||||
*
|
||||
|
235
cal/regress.cal
235
cal/regress.cal
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* regress - calc regression and correctness test suite
|
||||
*
|
||||
* Copyright (C) 1999-2006 David I. Bell and Landon Curt Noll
|
||||
* Copyright (C) 1999-2017 David I. Bell and Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.10 $
|
||||
* @(#) $Id: regress.cal,v 30.10 2013/09/01 22:08:44 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/regress.cal,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:50:36
|
||||
* File existed as early as: before 1990
|
||||
*
|
||||
@@ -403,14 +399,14 @@ define test_config()
|
||||
'512: config("trace") == 0');
|
||||
vrfy(config("maxprint") == 16,
|
||||
'513: config("maxprint") == 16');
|
||||
vrfy(config("mul2") == 1780,
|
||||
'514: config("mul2") == 1780');
|
||||
vrfy(config("sq2") == 3388,
|
||||
'515: config("sq2") == 3388');
|
||||
vrfy(config("pow2") == 176,
|
||||
'516: config("pow2") == 176');
|
||||
vrfy(config("redc2") == 220,
|
||||
'517: config("redc2") == 220');
|
||||
vrfy(config("mul2") == 28,
|
||||
'514: config("mul2") == 28');
|
||||
vrfy(config("sq2") == 28,
|
||||
'515: config("sq2") == 28');
|
||||
vrfy(config("pow2") == 20,
|
||||
'516: config("pow2") == 20');
|
||||
vrfy(config("redc2") == 25,
|
||||
'517: config("redc2") == 25');
|
||||
vrfy(config("tilde"),
|
||||
'518: config("tilde")');
|
||||
vrfy(config("tab"),
|
||||
@@ -768,6 +764,8 @@ print '016: parsed test_bignums()';
|
||||
|
||||
/*
|
||||
* Test many of the built-in functions.
|
||||
*
|
||||
* See test_functionss() starting at test 9000 for more built-in function tests.
|
||||
*/
|
||||
define test_functions()
|
||||
{
|
||||
@@ -1445,91 +1443,10 @@ define test_functions()
|
||||
vrfy(jacobi(-1,-1) == 0, '1236: jacobi(-1,-1) == 0');
|
||||
vrfy(jacobi(0,-1) == 0, '1237: jacobi(0,-1) == 0');
|
||||
|
||||
/* ctype function tests */
|
||||
vrfy(isalnum("A") == 1, '1238: isalnum("A") == 1');
|
||||
vrfy(isalnum("a") == 1, '1239: isalnum("a") == 1');
|
||||
vrfy(isalnum("2") == 1, '1239: isalnum("2") == 1');
|
||||
vrfy(isalnum("\t") == 0, '1240: isalnum("\t") == 0');
|
||||
|
||||
vrfy(isalpha("A") == 1, '1241: isalpha("A") == 1');
|
||||
vrfy(isalpha("a") == 1, '1242: isalpha("a") == 1');
|
||||
vrfy(isalpha("2") == 0, '1243: isalpha("2") == 0');
|
||||
vrfy(isalpha("\t") == 0, '1244: isalpha("\t") == 0');
|
||||
|
||||
vrfy(iscntrl("A") == 0, '1245: iscntrl("A") == 0');
|
||||
vrfy(iscntrl("a") == 0, '1246: iscntrl("a") == 0');
|
||||
vrfy(iscntrl("2") == 0, '1247: iscntrl("2") == 0');
|
||||
vrfy(iscntrl("\t") == 1, '1248: iscntrl("\t") == 1');
|
||||
|
||||
vrfy(isdigit("A") == 0, '1249: isdigit("A") == 0');
|
||||
vrfy(isdigit("a") == 0, '1250: isdigit("a") == 0');
|
||||
vrfy(isdigit("2") == 1, '1251: isdigit("2") == 1');
|
||||
vrfy(isdigit("\t") == 0, '1252: isdigit("\t") == 0');
|
||||
|
||||
vrfy(isgraph("A") == 1, '1253: isgraph("A") == 1');
|
||||
vrfy(isgraph("a") == 1, '1254: isgraph("a") == 1');
|
||||
vrfy(isgraph("2") == 1, '1255: isgraph("2") == 1');
|
||||
vrfy(isgraph("\t") == 0, '1255: isgraph("\t") == 0');
|
||||
|
||||
vrfy(islower("A") == 0, '1256: islower("A") == 0');
|
||||
vrfy(islower("a") == 1, '1257: islower("a") == 1');
|
||||
vrfy(islower("1") == 0, '1258: islower("1") == 0');
|
||||
|
||||
vrfy(isprint("A") == 1, '1259: isprint("A") == 1');
|
||||
vrfy(isprint("a") == 1, '1260: isprint("a") == 1');
|
||||
vrfy(isprint(" ") == 1, '1261: isprint(" ") == 1');
|
||||
vrfy(isprint("\t") == 0, '1262: isprint("\t") == 0');
|
||||
|
||||
vrfy(ispunct("A") == 0, '1263: ispunct("A") == 0');
|
||||
vrfy(ispunct("a") == 0, '1264: ispunct("a") == 0');
|
||||
vrfy(ispunct(" ") == 0, '1265: ispunct(" ") == 0');
|
||||
vrfy(ispunct("?") == 1, '1266: ispunct("?") == 1');
|
||||
|
||||
vrfy(isspace("A") == 0, '1267: isspace("A") == 0');
|
||||
vrfy(isspace("Krik") == 0, '1268: isspace("Krik") == 0');
|
||||
vrfy(isspace(" ") == 1, '1269: isspace(" ") == 1');
|
||||
vrfy(isspace("?") == 0, '1270: isspace("?") == 0');
|
||||
|
||||
vrfy(isupper("A") == 1, '1271: isupper("A") == 1');
|
||||
vrfy(isupper("a") == 0, '1272: isupper("a") == 0');
|
||||
vrfy(isupper("1") == 0, '1273: isupper("1") == 0');
|
||||
|
||||
vrfy(isxdigit("A") == 1, '1274: isxdigit("A") == 1');
|
||||
vrfy(isxdigit("f") == 1, '1275: isxdigit("f") == 1');
|
||||
vrfy(isxdigit("2") == 1, '1276: isxdigit("2") == 1');
|
||||
vrfy(isxdigit("x") == 0, '1277: isxdigit("x") == 0');
|
||||
|
||||
vrfy(strcasecmp("ab", "aBc") == -1,
|
||||
'1278: strcasecmp("ab", "aBc") == -1');
|
||||
vrfy(strcasecmp("abc", "aBb") == 1,
|
||||
'1279: strcasecmp("abc", "aBb") == 1');
|
||||
vrfy(strcasecmp("abc", "abc") == 0,
|
||||
'1280: strcasecmp("abc", "abc") == 0');
|
||||
vrfy(strcasecmp("abc", "aBc") == 0,
|
||||
'1281: strcasecmp("abc", "aBc") == 0');
|
||||
vrfy(strcasecmp("abc", "aBd") == -1,
|
||||
'1282: strcasecmp("abc", "aBd") == -1');
|
||||
vrfy(strcasecmp("abc\0", "aBc") == 1,
|
||||
'1283: strcasecmp("abc\0", "aBc") == 1');
|
||||
vrfy(strcasecmp("a\0b", "A\0c") == -1,
|
||||
'1284: strcasecmp("a\0b", "A\0c") == -1');
|
||||
|
||||
vrfy(strncasecmp("abc", "xyz", 0) == 0,
|
||||
'1285: strncasecmp("abc", "xyz", 0) == 0');
|
||||
vrfy(strncasecmp("abc", "xyz", 1) == -1,
|
||||
'1286: strncasecmp("abc", "xyz", 1) == -1');
|
||||
vrfy(strncasecmp("abc", "", 1) == 1,
|
||||
'1287: strncasecmp("abc", "", 1) == 1');
|
||||
vrfy(strncasecmp("a", "b", 2) == -1,
|
||||
'1288: strncasecmp("a", "b", 2) == -1');
|
||||
vrfy(strncasecmp("ab", "Ac", 2) == -1,
|
||||
'1289: strncasecmp("ab", "Ac", 2) == -1');
|
||||
vrfy(strncasecmp("\0ac", "\0b", 2) == -1,
|
||||
'1290: strncasecmp("\0ac", "\0b", 2) == -1');
|
||||
vrfy(strncasecmp("ab", "aBc", 2) == 0,
|
||||
'1291: strncasecmp("ab", "aBc", 2) == 0');
|
||||
vrfy(strncasecmp("abc", "abd", 2) == 0,
|
||||
'1292: strncasecmp("abc", "abd", 2) == 0');
|
||||
/*
|
||||
* NOTE: Function tests are continued in test_functionss()
|
||||
* starting at test 9000.
|
||||
*/
|
||||
|
||||
print '1293: Ending test_functions';
|
||||
}
|
||||
@@ -8015,9 +7932,128 @@ print '8901: read -once "test8900"';
|
||||
read -once "test8900";
|
||||
print '8902: about to run test8900(1,,8903)';
|
||||
testnum = test8900(1,,8903);
|
||||
print '8999: ecnt = 203;'
|
||||
ecnt = 203;
|
||||
/* 89xx: test calc resource functions by Christoph Zurnieden */
|
||||
|
||||
|
||||
/*
|
||||
* Test more of the built-in functions.
|
||||
*
|
||||
* See test_functions() (test 700 - 1238) for other built-in function tests.
|
||||
*/
|
||||
define test_functions2()
|
||||
{
|
||||
print '9001: Beginning test_functions2';
|
||||
|
||||
/* ctype function tests */
|
||||
vrfy(isalnum("A") == 1, '9002: isalnum("A") == 1');
|
||||
vrfy(isalnum("a") == 1, '9003: isalnum("a") == 1');
|
||||
vrfy(isalnum("2") == 1, '9004: isalnum("2") == 1');
|
||||
vrfy(isalnum("\t") == 0, '9005: isalnum("\\t") == 0');
|
||||
|
||||
vrfy(isalpha("A") == 1, '9006: isalpha("A") == 1');
|
||||
vrfy(isalpha("a") == 1, '9007: isalpha("a") == 1');
|
||||
vrfy(isalpha("2") == 0, '9008: isalpha("2") == 0');
|
||||
vrfy(isalpha("\t") == 0, '9009: isalpha("\\t") == 0');
|
||||
|
||||
vrfy(iscntrl("A") == 0, '9010: iscntrl("A") == 0');
|
||||
vrfy(iscntrl("a") == 0, '9011: iscntrl("a") == 0');
|
||||
vrfy(iscntrl("2") == 0, '9012: iscntrl("2") == 0');
|
||||
vrfy(iscntrl("\t") == 1, '9013: iscntrl("\\t") == 1');
|
||||
|
||||
vrfy(isdigit("A") == 0, '9014: isdigit("A") == 0');
|
||||
vrfy(isdigit("a") == 0, '9015: isdigit("a") == 0');
|
||||
vrfy(isdigit("2") == 1, '9016: isdigit("2") == 1');
|
||||
vrfy(isdigit("\t") == 0, '9017: isdigit("\\t") == 0');
|
||||
|
||||
vrfy(isgraph("A") == 1, '9018: isgraph("A") == 1');
|
||||
vrfy(isgraph("a") == 1, '9019: isgraph("a") == 1');
|
||||
vrfy(isgraph("2") == 1, '9020: isgraph("2") == 1');
|
||||
vrfy(isgraph("\t") == 0, '9021: isgraph("\\t") == 0');
|
||||
|
||||
vrfy(islower("A") == 0, '9022: islower("A") == 0');
|
||||
vrfy(islower("a") == 1, '9023: islower("a") == 1');
|
||||
vrfy(islower("1") == 0, '9024: islower("1") == 0');
|
||||
|
||||
vrfy(isprint("A") == 1, '9025: isprint("A") == 1');
|
||||
vrfy(isprint("a") == 1, '9026: isprint("a") == 1');
|
||||
vrfy(isprint(" ") == 1, '9027: isprint(" ") == 1');
|
||||
vrfy(isprint("\t") == 0, '9028: isprint("\\t") == 0');
|
||||
|
||||
vrfy(ispunct("A") == 0, '9029: ispunct("A") == 0');
|
||||
vrfy(ispunct("a") == 0, '9030: ispunct("a") == 0');
|
||||
vrfy(ispunct(" ") == 0, '9031: ispunct(" ") == 0');
|
||||
vrfy(ispunct("?") == 1, '9032: ispunct("?") == 1');
|
||||
|
||||
vrfy(isspace("A") == 0, '9033: isspace("A") == 0');
|
||||
vrfy(isspace("Krik") == 0, '9034: isspace("Krik") == 0');
|
||||
vrfy(isspace(" ") == 1, '9035: isspace(" ") == 1');
|
||||
vrfy(isspace("?") == 0, '9036: isspace("?") == 0');
|
||||
|
||||
vrfy(isupper("A") == 1, '9037: isupper("A") == 1');
|
||||
vrfy(isupper("a") == 0, '9038: isupper("a") == 0');
|
||||
vrfy(isupper("1") == 0, '9039: isupper("1") == 0');
|
||||
|
||||
vrfy(isxdigit("A") == 1, '9040: isxdigit("A") == 1');
|
||||
vrfy(isxdigit("f") == 1, '9041: isxdigit("f") == 1');
|
||||
vrfy(isxdigit("2") == 1, '9042: isxdigit("2") == 1');
|
||||
vrfy(isxdigit("x") == 0, '9043: isxdigit("x") == 0');
|
||||
|
||||
vrfy(strcasecmp("ab", "aBc") == -1,
|
||||
'9044: strcasecmp("ab", "aBc") == -1');
|
||||
vrfy(strcasecmp("abc", "aBb") == 1,
|
||||
'9045: strcasecmp("abc", "aBb") == 1');
|
||||
vrfy(strcasecmp("abc", "abc") == 0,
|
||||
'9046: strcasecmp("abc", "abc") == 0');
|
||||
vrfy(strcasecmp("abc", "aBc") == 0,
|
||||
'9047: strcasecmp("abc", "aBc") == 0');
|
||||
vrfy(strcasecmp("abc", "aBd") == -1,
|
||||
'9048: strcasecmp("abc", "aBd") == -1');
|
||||
vrfy(strcasecmp("abc\0", "aBc") == 1,
|
||||
'9049: strcasecmp("a8c\\0", "aBc") == 1');
|
||||
vrfy(strcasecmp("a\0b", "A\0c") == -1,
|
||||
'9050: strcasecmp("a\\0b", "A\\0c") == -1');
|
||||
|
||||
vrfy(strncasecmp("abc", "xyz", 0) == 0,
|
||||
'9051: strncasecmp("abc", "xyz", 0) == 0');
|
||||
vrfy(strncasecmp("abc", "xyz", 1) == -1,
|
||||
'9052: strncasecmp("abc", "xyz", 1) == -1');
|
||||
vrfy(strncasecmp("abc", "", 1) == 1,
|
||||
'9053: strncasecmp("abc", "", 1) == 1');
|
||||
vrfy(strncasecmp("a", "b", 2) == -1,
|
||||
'9054: strncasecmp("a", "b", 2) == -1');
|
||||
vrfy(strncasecmp("ab", "Ac", 2) == -1,
|
||||
'9055: strncasecmp("ab", "Ac", 2) == -1');
|
||||
vrfy(strncasecmp("\0ac", "\0b", 2) == -1,
|
||||
'9056: strncasecmp("\\0ac", "\\0b", 2) == -1');
|
||||
vrfy(strncasecmp("ab", "aBc", 2) == 0,
|
||||
'9057: strncasecmp("ab", "aBc", 2) == 0');
|
||||
vrfy(strncasecmp("abc", "abd", 2) == 0,
|
||||
'9058: strncasecmp("abc", "abd", 2) == 0');
|
||||
|
||||
local s1 = " gnu lesser general public license";
|
||||
print '9059: local s1 = " gnu lesser general public license";';
|
||||
|
||||
vrfy(strcmp(strtolower(" GNU Lesser General Public License"), s1) == 0,
|
||||
'9060: strcmp(strtolower(" GNU Lesser General Public License"),' +
|
||||
' s1) == 0');
|
||||
|
||||
local s2 = " GNU LESSER GENERAL PUBLIC LICENSE";
|
||||
print '9061: local s2 = " GNU LESSER GENERAL PUBLIC LICENSE";';
|
||||
|
||||
vrfy(strcmp(strtoupper(" GNU Lesser General Public License"), s2) == 0,
|
||||
'9062: strcmp(strtoupper(" GNU Lesser General Public License"),' +
|
||||
' s2) == 0');
|
||||
|
||||
print '9063: Ending test_functions2';
|
||||
}
|
||||
print;
|
||||
print '9000: parsed test_functions2()';
|
||||
print;
|
||||
return test_functions2();
|
||||
|
||||
|
||||
/*
|
||||
* read various calc resource files
|
||||
*
|
||||
@@ -8028,7 +8064,6 @@ testnum = test8900(1,,8903);
|
||||
* hello.cal - designed to go into an infinite loop
|
||||
* lucal.cal - already read by this file
|
||||
* lucas_chk.cal - already read by this file
|
||||
* lucas_tbl.cal - duplicatres code already read by another file
|
||||
* regress.cal - this file
|
||||
* surd.cal - already read by this file
|
||||
* test9999.cal - files of this form are already read by this file
|
||||
@@ -8101,8 +8136,6 @@ read -once intfile;
|
||||
print '9830: read -once intfile';
|
||||
read -once lucas;
|
||||
print '9831: read -once lucas';
|
||||
read -once lucas_tbl;
|
||||
print '9832: read -once lucas_tbl';
|
||||
read -once natnumset;
|
||||
print '9833: read -once natnumset';
|
||||
read -once repeat;
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: repeat.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/repeat.cal,v $
|
||||
*
|
||||
* Under source code control: 2003/01/05 00:00:01
|
||||
* File existed as early as: 2003
|
||||
*
|
||||
|
@@ -15,10 +15,6 @@
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*
|
||||
* @(#) $Revision: 30.2 $
|
||||
* @(#) $Id: screen.cal,v 30.2 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/screen.cal,v $
|
||||
*
|
||||
* This file is not covered under version 2.1 of the GNU LGPL.
|
||||
*
|
||||
* Under source code control: 2006/03/08 05:54:09
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: seedrandom.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/seedrandom.cal,v $
|
||||
*
|
||||
* Under source code control: 1996/01/01 08:21:00
|
||||
* File existed as early as: 1996
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: set8700.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/set8700.cal,v $
|
||||
*
|
||||
* Under source code control: 2006/05/20 14:10:11
|
||||
* File existed as early as: 2006
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
##
|
||||
## @(#) $Revision: 30.1 $
|
||||
## @(#) $Id: set8700.line,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/bin/calc/cal/RCS/set8700.line,v $
|
||||
##
|
||||
## Under source code control: 2006/05/20 14:10:11
|
||||
## File existed as early as: 2006
|
||||
##
|
||||
|
71
cal/smallfactors.cal
Normal file
71
cal/smallfactors.cal
Normal file
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* smallfactors - find the factors of a number < 2^32
|
||||
*
|
||||
* Copyright (C) 2013 Christoph Zurnieden
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||
* Public License for more details.
|
||||
*
|
||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
static resource_debug_level;
|
||||
resource_debug_level = config("resource_debug", 0);
|
||||
|
||||
|
||||
define smallfactors(x0)
|
||||
{
|
||||
local d q x flist tuple w;
|
||||
|
||||
if (x >= (2 ^ 32) - 1)
|
||||
return newerror("smallfactors: number must be < 2^32 -1");
|
||||
|
||||
tuple = mat[2];
|
||||
flist = list();
|
||||
x = x0;
|
||||
d = 2;
|
||||
q = 0;
|
||||
tuple[0] = d;
|
||||
if (x < 2)
|
||||
return 0;
|
||||
do {
|
||||
q = x // d;
|
||||
while (x == (q * d)) {
|
||||
tuple[0] = d;
|
||||
tuple[1]++;
|
||||
x = floor(q);
|
||||
q = x // d;
|
||||
}
|
||||
d = nextprime(d);
|
||||
if (tuple[1] > 0)
|
||||
append(flist, tuple);
|
||||
tuple = mat[2];
|
||||
} while (d <= x);
|
||||
return flist;
|
||||
}
|
||||
|
||||
define printsmallfactors(flist)
|
||||
{
|
||||
local k;
|
||||
for (k = 0; k < size(flist); k++) {
|
||||
print flist[k][0]:"^":flist[k][1];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
config("resource_debug", resource_debug_level),;
|
||||
if (config("resource_debug") & 3) {
|
||||
print "smallfactors(x0)";
|
||||
print "printsmallfactors(flist)";
|
||||
|
||||
}
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.3 $
|
||||
* @(#) $Id: solve.cal,v 30.3 2013/08/11 08:41:38 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/solve.cal,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:50:37
|
||||
* File existed as early as: before 1990
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.6 $
|
||||
* @(#) $Id: specialfunctions.cal,v 30.6 2013/09/01 17:48:27 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/specialfunctions.cal,v $
|
||||
*
|
||||
* Under source code control: 2013/08/11 01:31:28
|
||||
* File existed as early as: 2013
|
||||
*/
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.4 $
|
||||
* @(#) $Id: statistics.cal,v 30.4 2013/08/18 20:01:53 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/statistics.cal,v $
|
||||
*
|
||||
* Under source code control: 2013/08/11 01:31:28
|
||||
* File existed as early as: 2013
|
||||
*/
|
||||
|
41
cal/strings.cal
Normal file
41
cal/strings.cal
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* strings - implementation of some of the macros in ctype.h
|
||||
*
|
||||
* Copyright (C) 2013 Christoph Zurnieden
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||
* Public License for more details.
|
||||
*
|
||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
static resource_debug_level;
|
||||
resource_debug_level = config("resource_debug", 0);
|
||||
|
||||
define isascii(c){
|
||||
c = ord(c);
|
||||
return (c >= 0 && c< 128);
|
||||
}
|
||||
|
||||
define isblank(c){
|
||||
c = ord(c);
|
||||
return ( c == 32 || c == 9 );
|
||||
}
|
||||
|
||||
|
||||
config("resource_debug", resource_debug_level),;
|
||||
if (config("resource_debug") & 3) {
|
||||
print "isascii(c)";
|
||||
print "isblank(c)";
|
||||
}
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: sumsq.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/sumsq.cal,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:50:37
|
||||
* File existed as early as: before 1990
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: sumtimes.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/sumtimes.cal,v $
|
||||
*
|
||||
* Under source code control: 2006/06/22 17:29
|
||||
* File existed as early as: 2006
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: surd.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/surd.cal,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:50:38
|
||||
* File existed as early as: before 1990
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: test1700.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/test1700.cal,v $
|
||||
*
|
||||
* Under source code control: 1994/03/14 23:12:51
|
||||
* File existed as early as: 1994
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: test2300.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/test2300.cal,v $
|
||||
*
|
||||
* Under source code control: 1995/07/09 06:12:13
|
||||
* File existed as early as: 1995
|
||||
*
|
||||
|
@@ -19,10 +19,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.3 $
|
||||
* @(#) $Id: test2600.cal,v 30.3 2013/08/11 08:41:38 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/test2600.cal,v $
|
||||
*
|
||||
* Under source code control: 1995/10/13 00:13:14
|
||||
* File existed as early as: 1995
|
||||
*
|
||||
|
@@ -19,10 +19,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.2 $
|
||||
* @(#) $Id: test2700.cal,v 30.2 2013/08/11 08:41:38 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/test2700.cal,v $
|
||||
*
|
||||
* Under source code control: 1995/11/01 22:52:25
|
||||
* File existed as early as: 1995
|
||||
*
|
||||
|
@@ -19,10 +19,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: test3100.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/test3100.cal,v $
|
||||
*
|
||||
* Under source code control: 1995/11/28 11:56:57
|
||||
* File existed as early as: 1995
|
||||
*
|
||||
|
@@ -19,10 +19,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: test3300.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/test3300.cal,v $
|
||||
*
|
||||
* Under source code control: 1995/12/02 04:27:41
|
||||
* File existed as early as: 1995
|
||||
*
|
||||
|
@@ -19,10 +19,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: test3400.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/test3400.cal,v $
|
||||
*
|
||||
* Under source code control: 1995/12/02 05:20:11
|
||||
* File existed as early as: 1995
|
||||
*
|
||||
|
@@ -19,10 +19,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: test3500.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/test3500.cal,v $
|
||||
*
|
||||
* Under source code control: 1995/12/18 22:50:46
|
||||
* File existed as early as: 1995
|
||||
*
|
||||
|
@@ -19,10 +19,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.2 $
|
||||
* @(#) $Id: test4000.cal,v 30.2 2013/08/11 08:41:38 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/test4000.cal,v $
|
||||
*
|
||||
* Under source code control: 1996/03/13 02:38:45
|
||||
* File existed as early as: 1996
|
||||
*
|
||||
|
@@ -19,10 +19,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: test4100.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/test4100.cal,v $
|
||||
*
|
||||
* Under source code control: 1996/03/13 03:53:22
|
||||
* File existed as early as: 1996
|
||||
*
|
||||
|
@@ -19,10 +19,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: test4600.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/test4600.cal,v $
|
||||
*
|
||||
* Under source code control: 1996/07/02 20:04:40
|
||||
* File existed as early as: 1996
|
||||
*
|
||||
|
@@ -19,10 +19,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: test5100.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/test5100.cal,v $
|
||||
*
|
||||
* Under source code control: 1996/12/02 23:57:10
|
||||
* File existed as early as: 1996
|
||||
*
|
||||
|
@@ -19,10 +19,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: test5200.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/test5200.cal,v $
|
||||
*
|
||||
* Under source code control: 1997/02/07 02:48:10
|
||||
* File existed as early as: 1997
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: test8400.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/test8400.cal,v $
|
||||
*
|
||||
* Under source code control: 1999/10/31 01:00:03
|
||||
* File existed as early as: 1999
|
||||
*
|
||||
|
@@ -19,10 +19,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.2 $
|
||||
* @(#) $Id: test8500.cal,v 30.2 2013/08/11 08:41:38 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/test8500.cal,v $
|
||||
*
|
||||
* Under source code control: 1999/11/12 20:59:59
|
||||
* File existed as early as: 1999
|
||||
*
|
||||
|
@@ -19,10 +19,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.1 $
|
||||
* @(#) $Id: test8600.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/test8600.cal,v $
|
||||
*
|
||||
* Under source code control: 2000/12/04 19:57:02
|
||||
* File existed as early as: 2000
|
||||
*
|
||||
|
@@ -17,10 +17,6 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* @(#) $Revision: 30.6 $
|
||||
* @(#) $Id: test8900.cal,v 30.6 2013/09/01 22:16:21 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/test8900.cal,v $
|
||||
*
|
||||
* Under source code control: 2013/08/11 01:31:28
|
||||
* File existed as early as: 2013
|
||||
*/
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user