summaryrefslogtreecommitdiff
path: root/math
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1998-01-21 17:04:36 +0000
committerUlrich Drepper <drepper@redhat.com>1998-01-21 17:04:36 +0000
commit740152054ecbda66dae0e0f66193d8e244cc2376 (patch)
treeaa093561b97c930db58cecd18ac45401476d3a26 /math
parentb9b49b44fdc1c74ad85076bca9ff7ea0200e2214 (diff)
1998-01-22 00:55 Ulrich Drepper <drepper@happy.cygnus.com> * libc.map: Add __libc_uid, __libc_pid, __syscall_rt_sigqueueinfo, __pread64, __pwrite64, and __getpid. * libc/rt/aio_misc.c: Use pread and pwrite instead of __ protected versions. 1998-01-06 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/unix/sysv/linux/alpha/syscalls.list: Define the cancelable socket functions as __libc_xxx with __xxx as weak alias. * sysdeps/unix/sysv/linux/mips/syscalls.list: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list: Likewise. * sysdeps/unix/sysv/linux/m68k/socket.S: Allow __socket to be redefined. * sysdeps/unix/sysv/linux/i386/socket.S: Likewise. * sysdeps/unix/sysv/linux/arm/socket.S: Likewise. * sysdeps/unix/sysv/linux/powerpc/socket.S: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/socket.S: Likewise. * sysdeps/unix/sysv/linux/accept.S: Make __libc_xxx the main name and __xxx a weak alias. * sysdeps/unix/sysv/linux/connect.S: Likewise. * sysdeps/unix/sysv/linux/recv.S: Likewise. * sysdeps/unix/sysv/linux/recvfrom.S: Likewise. * sysdeps/unix/sysv/linux/recvmsg.S: Likewise. * sysdeps/unix/sysv/linux/send.S: Likewise. * sysdeps/unix/sysv/linux/sendmsg.S: Likewise. * sysdeps/unix/sysv/linux/sendto.S: Likewise. 1998-01-21 Andreas Jaeger <aj@arthur.rhein-neckar.de> * locale/langinfo.h: Add defines. * dirent/dirent.h: Add defines for DT_*, check also for _DIRENT_HAVE_D_TYPE. Suggested by Roland McGrath. 1998-01-16 Andreas Jaeger <aj@arthur.rhein-neckar.de> * sysdeps/unix/sysv/linux/netinet/ip_fw.h: Update from Linux 2.1.73+79. * README.template: Update information about possible configurations. * manual/mbyte.texi (Wide String Conversion): Fix declaration of wcstombs. Pointed out by Jochen Voss <voss@mathematik.uni-kl.de>. [PR libc/417]. * manual/time.texi (Priority): Correct description of PRIO_MAX. Pointed out by Jochen Voss <voss@mathematik.uni-kl.de>. [PR libc/416]. 11998-01-21 21:34 Ulrich Drepper <drepper@cygnus.com> * sysdeps/alpha/fpu/bits/mathdef.h: Add definition of FP_ILOGB0 and FP_ILOGNAN. Patch by a sun <asun@zoology.washington.edu>. 1998-01-21 17:53 Ulrich Drepper <drepper@cygnus.com> * sysdeps/generic/_strerror.c: Handle BUFLEN == 0. Reported by Andreas Jaeger. 1998-01-20 18:13 Ulrich Drepper <drepper@cygnus.com> * locale/programs/ld-collate.c: Little optimizations. * stdio-common/xbug.c: Unset LD_LIBRRARY_PATH variable. * string/Makefile (tests): Add tst-inlcall. * string/tst-inlcall.c: New file. * string/strsignal.c: Add support for real-time signals. * sysdeps/generic/_strerror.c: Fix Handling of unknown error in presense of small buffer. * sysdeps/i386/bits/string.h: Define _HAVE_STRING_ARCH_* macros. * sysdeps/i386/i486/bits/string.h: Correct strrchr implementation for i686. * sysdeps/unix/sysv/linux/siglist.c: Change length of arrays to _NSIG + 1. 1998-01-02 15:10 Matthias Urlichs <urlichs@noris.de> * Rules: Add explicit rule for dummy.o; at least one library needs it and it isn't autogenerated by the default rules. 1997-12-31 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * math/libm-test.c: Tweak epsilons. 1997-12-31 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * math/test-fenv.c (feenv_nomask_test): Avoid dumping core in the child. (feenv_mask_test): Likewise. 1998-01-01 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Makeconfig: Don't export CPPFLAGS. 1998-01-01 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sunrpc/rpc_main.c (parseargs): Use perror to print error message. 1998-01-15 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * nss/nss_db/db-alias.c (_nss_db_getaliasent_r): Don't include terminating null in key size. 1998-01-13 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * nss/nss_files/files-service.c: Fix allocation size to include length of PROTO. * nss/nss_db/db-XXX.c (lookup): Always set errno and h_errno if applicable. Fix return value and error checking. (CONCAT(_nss_db_get,ENTNAME_r)): Loop around to skip over unparsable lines. (DB_LOOKUP): Allocate space for terminating null byte. * nss/db-Makefile ($(VAR_DB)/passwd.db): Don't handle duplicate uids specially. * db2/makedb.c (process_input): Continue processing if a duplicate key is encountered. 1998-01-19 15:20 Ulrich Drepper <drepper@cygnus.com> * time/tzfile.h: Updated from tzcode1998b. * time/zdump.c: Likewise. * time/zic.c: Likewise. * time/africa: Update from tzdata1998b. * time/antarctica: Likewise. * time/asia: Likewise. * time/australasia: Likewise. * time/etcetera: Likewise. * time/europe: Likewise. * time/leapseconds: Likewise. * time/northamerica: Likewise. * time/southamerica: Likewise. 1998-01-12 Andreas Jaeger <aj@arthur.rhein-neckar.de> * nss/nss_files/files-alias.c (get_next_alias): Do mail alias lookups ignoring case. * nss/nss_files/files-network.c: Do network lookups ignoring case. * nss/nss_files/files-hosts.c: Do hostname lookups ignoring case. * nss/nss_files/files-parse.c (LOOKUP_NAME_CASE): New macro for case insensitive comparing. Patches by Cristian Gafton <gafton@redhat.com>. 1998-01-09 Andreas Jaeger <aj@arthur.rhein-neckar.de> * sysdeps/unix/sysv/linux/net/if.h: Add IFF_*defines. Suggested by Roland McGrath. [PR libc/395] 1998-01-08 Andreas Jaeger <aj@arthur.rhein-neckar.de> * manual/arith.texi (Parsing of Integers): Correct description of strtoul. Pointed out by Scott Snyder <snyder@fnald0.fnal.gov>. [PR libc/396] 1997-12-30 14:14 Matthias Urlichs <urlichs@noris.de> * misc/lsearch.c (lsearch): Return a pointer to the new element if one was "allocated". 1997-12-26 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * string/strsignal.c: NSIG is not a valid index into _sys_siglist. Don't zap the last character of the "Unknown signal" message. 1998-01-19 15:08 Ulrich Drepper <drepper@cygnus.com> * locale/programs/charmap.c (parse_charmap): Correct parsing of ellipsis expressions. * locale/programs/charset.c (insert_char): Correctly insert value of eliipsis expression.
Diffstat (limited to 'math')
-rw-r--r--math/libm-test.c100
-rw-r--r--math/test-fenv.c17
2 files changed, 67 insertions, 50 deletions
diff --git a/math/libm-test.c b/math/libm-test.c
index 1b0b163e99..efb89f7033 100644
--- a/math/libm-test.c
+++ b/math/libm-test.c
@@ -869,8 +869,8 @@ acosh_test (void)
#endif
check ("acosh(1) == 0", FUNC(acosh) (1), 0);
- check ("acosh(7) == 2.633915793...", FUNC(acosh) (7),
- 2.6339157938496334172L);
+ check_eps ("acosh(7) == 2.633915793...", FUNC(acosh) (7),
+ 2.6339157938496334172L, CHOOSE (3e-19, 0, 0));
}
@@ -1069,7 +1069,7 @@ cbrt_test (void)
check_eps ("cbrt (0.970299) == 0.99", FUNC(cbrt) (0.970299), 0.99,
CHOOSE (2e-17L, 0, 0));
check_eps ("cbrt (0.7) == .8879040017...", FUNC(cbrt) (0.7),
- 0.8879040017426007084L, CHOOSE(2e-17L, 2e-16, 0));
+ 0.8879040017426007084L, CHOOSE(2e-17L, 6e-16, 0));
}
@@ -2688,15 +2688,15 @@ cexp_test (void)
result = FUNC(cexp) (BUILD_COMPLEX (0.7, 1.2));
check_eps ("real(cexp(0.7 + i 1.2)) == 0.72969...", __real__ result,
- 0.7296989091503236012L, CHOOSE(6e-17L, 0, 6e-8));
+ 0.7296989091503236012L, CHOOSE(6e-17L, 0, 2e-7));
check_eps ("imag(cexp(0.7 + i 1.2)) == 1.87689...", __imag__ result,
- 1.8768962328348102821L, CHOOSE(2e-16L, 0, 0));
+ 1.8768962328348102821L, CHOOSE(2e-16L, 0, 3e-7));
result = FUNC(cexp) (BUILD_COMPLEX (-2, -3));
- check_eps ("real(cexp(-2 - i 3)) == --0.13398...", __real__ result,
- -0.1339809149295426134L, CHOOSE(6e-20L, 0, 0));
+ check_eps ("real(cexp(-2 - i 3)) == -0.13398...", __real__ result,
+ -0.1339809149295426134L, CHOOSE(6e-20L, 0, 2e-8));
check_eps ("imag(cexp(-2 - i 3)) == -0.01909...", __imag__ result,
- -0.0190985162611351964L, CHOOSE(4e-20L, 0, 0));
+ -0.0190985162611351964L, CHOOSE(4e-20L, 0, 2e-9));
}
@@ -2871,13 +2871,13 @@ csin_test (void)
check_eps ("real(csin(0.7 + i 1.2)) = 1.166456341...", __real__ result,
1.1664563419657581376L, CHOOSE(2e-16L, 0, 0));
check_eps ("imag(csin(0.7 + i 1.2)) = 1.154499724...", __imag__ result,
- 1.1544997246948547371L, CHOOSE(2e-17L, 0, 0));
+ 1.1544997246948547371L, CHOOSE(2e-17L, 0, 2e-7));
result = FUNC(csin) (BUILD_COMPLEX (-2, -3));
- check ("real(csin(-2 - i 3)) == --9.15449...", __real__ result,
- -9.1544991469114295734L);
- check ("imag(csin(-2 - i 3)) == -4.16890...", __imag__ result,
- 4.1689069599665643507L);
+ check_eps ("real(csin(-2 - i 3)) == -9.15449...", __real__ result,
+ -9.1544991469114295734L, CHOOSE(4e-18L, 0, 1e-6));
+ check_eps ("imag(csin(-2 - i 3)) == -4.16890...", __imag__ result,
+ 4.1689069599665643507L, CHOOSE(2e-17L, 0, 5e-7));
}
@@ -3052,13 +3052,13 @@ csinh_test (void)
check_eps ("real(csinh(0.7 + i 1.2)) = 0.274878686...", __real__ result,
0.27487868678117583582L, CHOOSE(2e-17L, 6e-17, 3e-8));
check_eps ("imag(csinh(0.7 + i 1.2)) = 1.169866572...", __imag__ result,
- 1.1698665727426565139L, CHOOSE(6e-17L, 0, 3e-8));
+ 1.1698665727426565139L, CHOOSE(6e-17L, 0, 2e-7));
result = FUNC(csinh) (BUILD_COMPLEX (-2, -3));
check_eps ("real(csinh(-2 - i 3)) == -3.59056...", __real__ result,
- 3.5905645899857799520L, CHOOSE(0, 5e-16, 0));
+ 3.5905645899857799520L, CHOOSE(7e-19L, 5e-16, 3e-7));
check_eps ("imag(csinh(-2 - i 3)) == -0.53092...", __imag__ result,
- -0.5309210862485198052L, CHOOSE(2e-19L, 2e-16, 6e-8));
+ -0.5309210862485198052L, CHOOSE(3e-19L, 2e-16, 6e-8));
}
@@ -3229,15 +3229,15 @@ ccos_test (void)
result = FUNC(ccos) (BUILD_COMPLEX (0.7, 1.2));
check_eps ("real(ccos(0.7 + i 1.2)) = 1.384865764...", __real__ result,
- 1.3848657645312111080L, CHOOSE(6e-19L, 3e-16, 2e-7));
+ 1.3848657645312111080L, CHOOSE(4e-18L, 3e-16, 2e-7));
check_eps ("imag(ccos(0.7 + i 1.2)) = -0.972421703...", __imag__ result,
-0.97242170335830028619L, CHOOSE(2e-16L, 2e-16, 0));
result = FUNC(ccos) (BUILD_COMPLEX (-2, -3));
- check ("real(ccos(-2 - i 3)) == --4.18962...", __real__ result,
- -4.1896256909688072301L);
+ check_eps ("real(ccos(-2 - i 3)) == -4.18962...", __real__ result,
+ -4.1896256909688072301L, CHOOSE(2e-17L, 0, 5e-7));
check_eps ("imag(ccos(-2 - i 3)) == -9.10922...", __imag__ result,
- -9.1092278937553365979L, CHOOSE(9e-19L, 0, 1e-6));
+ -9.1092278937553365979L, CHOOSE(3e-18L, 0, 1e-6));
}
@@ -3408,15 +3408,15 @@ ccosh_test (void)
result = FUNC(ccosh) (BUILD_COMPLEX (0.7, 1.2));
check_eps ("real(ccosh(0.7 + i 1.2)) == 0.45482...", __real__ result,
- 0.4548202223691477654L, CHOOSE(4e-17L, 6e-17, 3e-8));
+ 0.4548202223691477654L, CHOOSE(5e-17L, 6e-17, 9e-8));
check_eps ("imag(ccosh(0.7 + i 1.2)) == 0.70702...", __imag__ result,
0.7070296600921537682L, CHOOSE(7e-17L, 0, 0));
result = FUNC(ccosh) (BUILD_COMPLEX (-2, -3));
- check ("real(ccosh(-2 - i 3)) == --3.72454...", __real__ result,
- -3.7245455049153225654L);
+ check_eps ("real(ccosh(-2 - i 3)) == -3.72454...", __real__ result,
+ -3.7245455049153225654L, CHOOSE(7e-19L, 0, 3e-7));
check_eps ("imag(ccosh(-2 - i 3)) == -0.51182...", __imag__ result,
- 0.5118225699873846088L, CHOOSE(6e-20, 2e-16, 6e-8));
+ 0.5118225699873846088L, CHOOSE(3e-19L, 2e-16, 6e-8));
}
@@ -3553,10 +3553,10 @@ cacos_test (void)
-1.0927647857577371459L, CHOOSE(4e-17L, 0, 3e-7));
result = FUNC(cacos) (BUILD_COMPLEX (-2, -3));
- check ("real(cacos(-2 - i 3)) == -2.14144...", __real__ result,
- 2.1414491111159960199L);
+ check_eps ("real(cacos(-2 - i 3)) == 2.14144...", __real__ result,
+ 2.1414491111159960199L, CHOOSE(3e-19L, 0, 0));
check_eps ("imag(cacos(-2 - i 3)) == -1.98338...", __imag__ result,
- 1.9833870299165354323L, CHOOSE(2e-19L, 0, 0));
+ 1.9833870299165354323L, CHOOSE(3e-19L, 0, 0));
}
@@ -3694,9 +3694,9 @@ cacosh_test (void)
result = FUNC(cacosh) (BUILD_COMPLEX (-2, -3));
check_eps ("real(cacosh(-2 - i 3)) == -1.98338...", __real__ result,
- -1.9833870299165354323L, CHOOSE (6e-19, 3e-16, 9e-7));
+ -1.9833870299165354323L, CHOOSE (2e-18L, 3e-16, 9e-7));
check_eps ("imag(cacosh(-2 - i 3)) == 2.14144...", __imag__ result,
- 2.1414491111159960199L, CHOOSE (3e-19, 5e-16, 0));
+ 2.1414491111159960199L, CHOOSE (3e-19, 5e-16, 1e-6));
}
@@ -3838,10 +3838,10 @@ casin_test (void)
1.0927647857577371459L, CHOOSE(4e-17L, 0, 3e-7));
result = FUNC(casin) (BUILD_COMPLEX (-2, -3));
- check ("real(casin(-2 - i 3)) == --0.57065...", __real__ result,
- -0.5706527843210994007L);
+ check_eps ("real(casin(-2 - i 3)) == -0.57065...", __real__ result,
+ -0.5706527843210994007L, CHOOSE(4e-19L, 0, 0));
check_eps ("imag(casin(-2 - i 3)) == -1.98338...", __imag__ result,
- -1.9833870299165354323L, CHOOSE(2e-19L, 0, 0));
+ -1.9833870299165354323L, CHOOSE(3e-19L, 0, 0));
}
@@ -3980,10 +3980,10 @@ casinh_test (void)
check_eps ("real(casinh(0.7 + i 1.2)) == 0.97865...", __real__ result,
0.9786545955936738768L, CHOOSE(5e-17L, 2e-16, 0));
check_eps ("imag(casinh(0.7 + i 1.2)) == 0.91135...", __imag__ result,
- 0.9113541895315601156L, CHOOSE(7e-19L, 0, 6e-8));
+ 0.9113541895315601156L, CHOOSE(7e-19L, 2e-16, 6e-8));
result = FUNC(casinh) (BUILD_COMPLEX (-2, -3));
- check_eps ("real(casinh(-2 - i 3)) == --1.96863...", __real__ result,
+ check_eps ("real(casinh(-2 - i 3)) == -1.96863...", __real__ result,
-1.9686379257930962917L, CHOOSE(7e-19L, 2e-15, 2e-7));
check_eps ("imag(casinh(-2 - i 3)) == -0.96465...", __imag__ result,
-0.9646585044076027920L, CHOOSE(4e-19L, 2e-15, 4e-7));
@@ -4136,7 +4136,7 @@ catan_test (void)
check ("real(catan(-2 - i 3)) == -1.40992...", __real__ result,
-1.4099210495965755225L);
check_eps ("imag(catan(-2 - i 3)) == -0.22907...", __imag__ result,
- -0.2290726829685387662L, CHOOSE(1e-19L, 3e-17, 2e-8));
+ -0.2290726829685387662L, CHOOSE(1.1e-19L, 3e-17, 2e-8));
}
@@ -4284,9 +4284,9 @@ catanh_test (void)
result = FUNC(catanh) (BUILD_COMPLEX (-2, -3));
check_eps ("real(catanh(-2 - i 3)) == -0.14694...", __real__ result,
- -0.1469466662255297520L, CHOOSE (3e-20, 6e-17, 2e-8));
- check ("imag(catanh(-2 - i 3)) == -1.33897...", __imag__ result,
- -1.3389725222944935611L);
+ -0.1469466662255297520L, CHOOSE (9e-20L, 6e-17, 2e-8));
+ check_eps ("imag(catanh(-2 - i 3)) == -1.33897...", __imag__ result,
+ -1.3389725222944935611L, CHOOSE (7e-19L, 0, 0));
}
@@ -4586,10 +4586,10 @@ ctanh_test (void)
0.4778641038326365540L, CHOOSE(9e-17L, 6e-17, 0));
result = FUNC(ctanh) (BUILD_COMPLEX (-2, -3));
- check_eps ("real(ctanh(-2 - i 3)) == --0.96538...", __real__ result,
+ check_eps ("real(ctanh(-2 - i 3)) == -0.96538...", __real__ result,
-0.9653858790221331242L, CHOOSE(2e-19L, 0, 0));
- check_eps ("imag(ctanh(-2 - i 3)) == -0.00988...", __imag__ result,
- 0.0098843750383224937L, CHOOSE(2e-20L, 0, 1e-9));
+ check_eps ("imag(ctanh(-2 - i 3)) == 0.00988...", __imag__ result,
+ 0.0098843750383224937L, CHOOSE(7e-20L, 0, 1e-9));
}
@@ -4752,10 +4752,10 @@ clog_test (void)
1.0427218783685369524L, CHOOSE(2e-17L, 0, 0));
result = FUNC(clog) (BUILD_COMPLEX (-2, -3));
- check ("real(clog(-2 - i 3)) == -1.28247...", __real__ result,
- 1.2824746787307683680L);
+ check_eps ("real(clog(-2 - i 3)) == 1.28247...", __real__ result,
+ 1.2824746787307683680L, CHOOSE(3e-19L, 0, 0));
check_eps ("imag(clog(-2 - i 3)) == -2.15879...", __imag__ result,
- -2.1587989303424641704L, CHOOSE(3e-19L, 0, 0));
+ -2.1587989303424641704L, CHOOSE(2e-18L, 0, 0));
}
@@ -4934,10 +4934,10 @@ clog10_test (void)
0.4528483579352493248L, CHOOSE(6e-18, 6e-17, 3e-8));
result = FUNC(clog10) (BUILD_COMPLEX (-2, -3));
- check ("real(clog10(-2 - i 3)) == -0.55697...", __real__ result,
- 0.5569716761534183846L);
+ check_eps ("real(clog10(-2 - i 3)) == 0.55697...", __real__ result,
+ 0.5569716761534183846L, CHOOSE(6e-20L, 0, 0));
check_eps ("imag(clog10(-2 - i 3)) == -0.93755...", __imag__ result,
- -0.9375544629863747085L, CHOOSE (6e-20, 2e-16, 0));
+ -0.9375544629863747085L, CHOOSE (7e-19L, 2e-16, 0));
}
@@ -5102,8 +5102,8 @@ csqrt_test (void)
result = FUNC(csqrt) (BUILD_COMPLEX (-2, -3));
check_eps ("real(csqrt(-2 - i 3)) == -0.89597...", __real__ result,
0.8959774761298381247L, CHOOSE(6e-20L, 2e-16, 6e-8));
- check ("imag(csqrt(-2 - i 3)) == -1.67414...", __imag__ result,
- -1.6741492280355400404L);
+ check_eps ("imag(csqrt(-2 - i 3)) == -1.67414...", __imag__ result,
+ -1.6741492280355400404L, CHOOSE(0, 5e-16, 0));
}
@@ -5641,7 +5641,7 @@ identities (void)
identities1_test (-1, CHOOSE (1e-18L, 0, 1e-7));
identities2_test (0.2L, CHOOSE (1e-19L, 1e-16, 0));
- identities2_test (0.9L, CHOOSE (0, 1e-15, 2e-7));
+ identities2_test (0.9L, CHOOSE (3e-19L, 1e-15, 2e-7));
identities2_test (0, 0);
identities2_test (-1, CHOOSE (1e-18L, 1e-15, 2e-7));
diff --git a/math/test-fenv.c b/math/test-fenv.c
index 4da2e37dae..ab09410690 100644
--- a/math/test-fenv.c
+++ b/math/test-fenv.c
@@ -36,6 +36,7 @@
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
+#include <sys/resource.h>
/*
Since not all architectures might define all exceptions, we define
@@ -249,6 +250,14 @@ feenv_nomask_test (const char *flag_name, int fe_exc)
pid = fork ();
if (pid == 0)
{
+#ifdef RLIMIT_CORE
+ /* Try to avoid dumping core. */
+ struct rlimit core_limit;
+ core_limit.rlim_cur = 0;
+ core_limit.rlim_max = 0;
+ setrlimit (RLIMIT_CORE, &core_limit);
+#endif
+
fesetenv (FE_NOMASK_ENV);
feraiseexcept (fe_exc);
exit (2);
@@ -293,6 +302,14 @@ feenv_mask_test (const char *flag_name, int fe_exc)
pid = fork ();
if (pid == 0)
{
+#ifdef RLIMIT_CORE
+ /* Try to avoid dumping core. */
+ struct rlimit core_limit;
+ core_limit.rlim_cur = 0;
+ core_limit.rlim_max = 0;
+ setrlimit (RLIMIT_CORE, &core_limit);
+#endif
+
fesetenv (FE_DFL_ENV);
feraiseexcept (fe_exc);
exit (2);