mirror of
https://github.com/lcn2/calc.git
synced 2025-08-16 01:03:29 +03:00
Add new logn(x, n [,eps]) builtin to compute logarithms to base n. Verify that eps arguments (error tolerance arguments that override the default epsilon value) to builtin functions have proper values. Previously the eps argument had little to no value checks for many builtin functions. Document in help files for builtin functions that take eps arguments, the LIMIT range for such eps values.
154 lines
4.9 KiB
Plaintext
154 lines
4.9 KiB
Plaintext
NAME
|
|
sqrt - evaluate exactly or approximate a square root
|
|
|
|
SYNOPSIS
|
|
sqrt(x [, eps[, z]])
|
|
|
|
TYPES
|
|
If x is an object of type tt, or if x is not an object but y
|
|
is an object of type tt, and the user-defined function
|
|
tt_round has been defined, the types for x, y, z are as
|
|
required for tt_round, the value returned, if any, is as
|
|
specified in tt_round. For object x or y, z defaults to a
|
|
null value.
|
|
|
|
For other argument types:
|
|
|
|
x real or complex
|
|
eps 0 < real < 1, defaults to epsilon()
|
|
z integer
|
|
|
|
return real or complex
|
|
|
|
DESCRIPTION
|
|
For real or complex x, sqrt(x, y, z) returns either the exact
|
|
value of a square root of x (which is possible only if this
|
|
square root is rational) or a number for which the real and
|
|
imaginary parts are either exact or the nearest below or nearest
|
|
above to the exact values.
|
|
|
|
The argument, eps, specifies the epsilon/error value to be
|
|
used during calculations. By default, this value is epsilon().
|
|
|
|
The seven lowest bits of z are used to control the signs of the
|
|
result and the type of any rounding:
|
|
|
|
z bit 6 ((z & 64) > 0)
|
|
|
|
0: principal square root
|
|
|
|
1: negative principal square root
|
|
|
|
z bit 5 ((z & 32) > 0)
|
|
|
|
0: return an approximation square root
|
|
|
|
1: return exact square root when real & imaginary are rational
|
|
|
|
z bits 5-0 (z & 31)
|
|
|
|
0: round down or up according as y is positive or negative,
|
|
sgn(r) = sgn(y)
|
|
|
|
1: round up or down according as y is positive or negative,
|
|
sgn(r) = -sgn(y)
|
|
|
|
2: round towards zero, sgn(r) = sgn(x)
|
|
|
|
3: round away from zero, sgn(r) = -sgn(x)
|
|
|
|
4: round down
|
|
|
|
5: round up
|
|
|
|
6: round towards or from zero according as y is positive or
|
|
negative, sgn(r) = sgn(x/y)
|
|
|
|
7: round from or towards zero according as y is positive or
|
|
negative, sgn(r) = -sgn(x/y)
|
|
|
|
8: a/y is even
|
|
|
|
9: a/y is odd
|
|
|
|
10: a/y is even or odd according as x/y is positive or negative
|
|
|
|
11: a/y is odd or even according as x/y is positive or negative
|
|
|
|
12: a/y is even or odd according as y is positive or negative
|
|
|
|
13: a/y is odd or even according as y is positive or negative
|
|
|
|
14: a/y is even or odd according as x is positive or negative
|
|
|
|
15: a/y is odd or even according as x is positive or negative
|
|
|
|
The value of y and lowest 5 bits of z are used in the same way as
|
|
y and z in appr(x, y, z): for either the real or imaginary part
|
|
of the square root, if this is a multiple of y, it is returned
|
|
exactly; otherwise the value returned for the part is the
|
|
multiple of y nearest below or nearest above the true value.
|
|
For z = 0, the remainder has the sign of y; changing bit 0
|
|
changes to the other possibility; for z = 2, the remainder has the
|
|
sign of the true value, i.e. the rounding is towards zero; for
|
|
z = 4, the remainder is always positive, i.e. the rounding is down;
|
|
for z = 8, the rounding is to the nearest even multiple of y;
|
|
if 16 <= z < 32, the rounding is to the nearest multiple of y when
|
|
this is uniquely determined and otherwise is as if z were replaced
|
|
by z - 16.
|
|
|
|
With the initial default values, 1e-20 for epsilon() and 24 for
|
|
config("sqrt"), sqrt(x) returns the principal square root with
|
|
real and imaginary parts rounded to 20 decimal places, the 20th
|
|
decimal digit being even when the part differs from a multiple
|
|
of 1e-20 by 1/2 * 1e-20.
|
|
|
|
EXAMPLE
|
|
; eps = 1e-4
|
|
; print sqrt(4,eps,0), sqrt(4,eps,64), sqrt(8i,eps,0), sqrt(8i, eps, 64)
|
|
2 -2 2+2i -2-2i
|
|
|
|
; print sqrt(2,eps,0), sqrt(2,eps,1), sqrt(2,eps,24)
|
|
1.4142 1.4143 1.4142
|
|
|
|
; x = 1.2345678^2
|
|
; print sqrt(x,eps,24), sqrt(x,eps,32), sqrt(x,eps,96)
|
|
1.2346 1.2345678 -1.2345678
|
|
|
|
; print sqrt(.00005^2, eps, 24), sqrt(.00015^2, eps, 24)
|
|
0 0.0002
|
|
|
|
LIMITS
|
|
0 < eps < 1
|
|
|
|
LINK LIBRARY
|
|
COMPLEX *c_sqrt(COMPLEX *x, NUMBER *ep, long z)
|
|
NUMBER *qisqrt(NUMBER *q)
|
|
NUMBER *qsqrt(NUMBER *x, NUMBER *ep, long z)
|
|
FLAG zsqrt(ZVALUE x, ZVALUE *result, long z)
|
|
|
|
SEE ALSO
|
|
appr, epsilon
|
|
|
|
## Copyright (C) 1999,2021,2023 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.
|
|
##
|
|
## Under source code control: 1995/09/18 03:54:32
|
|
## File existed as early as: 1995
|
|
##
|
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|