|
|
1.1 ! root 1: .\" Copyright (c) 1985 Regents of the University of California. ! 2: .\" All rights reserved. The Berkeley software License Agreement ! 3: .\" specifies the terms and conditions for redistribution. ! 4: .\" ! 5: .\" @(#)infnan.3 6.4 (Berkeley) 5/27/86 ! 6: .\" ! 7: .TH INFNAN 3M "May 27, 1986" ! 8: .UC 6 ! 9: .ds nn \fINaN\fR ! 10: .SH NAME ! 11: infnan \- signals invalid floating-point operations on a VAX (temporary) ! 12: .SH SYNOPSIS ! 13: .nf ! 14: .B #include <math.h> ! 15: .PP ! 16: .B double infnan(iarg) ! 17: .B int iarg; ! 18: .SH DESCRIPTION ! 19: At some time in the future, some of the useful properties of ! 20: the Infinities and \*(nns in the IEEE standard 754 for Binary ! 21: Floating\-Point Arithmetic will be simulated in UNIX on the ! 22: DEC VAX by using its Reserved Operands. Meanwhile, the ! 23: Invalid, Overflow and Divide\-by\-Zero exceptions of the ! 24: IEEE standard are being approximated on a VAX by calls to a ! 25: procedure \fIinfnan\fR in appropriate places in \fIlibm\fR. When ! 26: better exception\-handling is implemented in UNIX, only ! 27: \fIinfnan\fR among the codes in \fIlibm\fR will have to be changed. ! 28: And users of \fIlibm\fR can design their own \fIinfnan\fR now to ! 29: insulate themselves from future changes. ! 30: .PP ! 31: Whenever an elementary function code in \fIlibm\fR has to ! 32: simulate one of the aforementioned IEEE exceptions, it calls ! 33: infnan(iarg) with an appropriate value of \fIiarg\fR. Then a ! 34: reserved operand fault stops computation. But \fIinfnan\fR could ! 35: be replaced by a function with the same name that returns ! 36: some plausible value, assigns an apt value to the global ! 37: variable \fIerrno\fR, and allows computation to resume. ! 38: Alternatively, the Reserved Operand Fault Handler could be ! 39: changed to respond by returning that plausible value, etc. ! 40: instead of aborting. ! 41: .PP ! 42: In the table below, the first two columns show various ! 43: exceptions signaled by the IEEE standard, and the default ! 44: result it prescribes. The third column shows what value is ! 45: given to \fIiarg\fR by functions in \fIlibm\fR when they ! 46: invoke infnan(iarg) under analogous circumstances on a VAX. ! 47: Currently \fIinfnan\fR stops computation under all those ! 48: circumstances. The last two columns offer an alternative; ! 49: they suggest a setting for \fIerrno\fR and a value for a ! 50: revised \fIinfnan\fR to return. And a C program to ! 51: implement that suggestion follows. ! 52: .sp 0.5 ! 53: .RS ! 54: .nf ! 55: .ta \w'Div\-by\-0'u+2n +\w'+Infinity'u+1n +\w'+ERANGE'u+1n +\w'ERANGE or EDOM'u+4n +\w'+HUGE'u+1n ! 56: IEEE IEEE ! 57: Signal Default \fIiarg\fR \fIerrno\fR \fIinfnan\fR ! 58: .if t \{\ ! 59: .sp -0.5 ! 60: .ta \w'Div\-by\-0'u+2n+\w'+Infinity'u+1n+\w'+ERANGE'u+1n+\w'ERANGE or EDOM'u+4n+\w'+HUGE'u+1n ! 61: .tc \(ru ! 62: ! 63: .ta \w'Div\-by\-0'u+2n +\w'+Infinity'u+1n +\w'+ERANGE'u+1n +\w'ERANGE or EDOM'u+4n +\w'+HUGE'u+1n ! 64: .tc \} ! 65: .if n \ ! 66: \l'5i' ! 67: Invalid \*(nn EDOM EDOM 0 ! 68: .if n \{\ ! 69: Overflow \(+-Infinity ERANGE ERANGE HUGE ! 70: Div\-by\-0 \(+-Infinity \(+-ERANGE ERANGE or EDOM \(+-HUGE \} ! 71: .if t \{\ ! 72: Overflow \(+-\(if ERANGE ERANGE HUGE ! 73: Div\-by\-0 \(+-\(if \(+-ERANGE ERANGE or EDOM \(+-HUGE \} ! 74: .sp 0.5 ! 75: (HUGE = 1.7e38 ... nearly 2.0**127) ! 76: .ta ! 77: .fi ! 78: .RE ! 79: .sp 0.5 ! 80: .PP ! 81: .nf ! 82: .ta \w'\fBextern int\fR'u+1n +\w'\fBdefault:\fR'u+1n +\w'\fB\-ERANGE:\fR'u+1n +\w'\fBerrno = ERANGE;\fR'u+1n ! 83: ALTERNATIVE \fIinfnan\fR:\fB ! 84: .sp 0.5 ! 85: #include <math.h> ! 86: #include <errno.h> ! 87: extern int errno ; ! 88: double infnan(iarg) ! 89: int iarg ; ! 90: { ! 91: switch(iarg) { ! 92: case \0ERANGE: errno = ERANGE; return(HUGE); ! 93: case \-ERANGE: errno = EDOM; return(\-HUGE); ! 94: default: errno = EDOM; return(0); ! 95: } ! 96: }\fR ! 97: .ta ! 98: .fi ! 99: .SH SEE ALSO ! 100: math(3M), intro(2), signal(3). ! 101: .PP ! 102: ERANGE and EDOM are defined in <errno.h>. See intro(2) ! 103: for explanation of EDOM and ERANGE.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.