improve asin
acos
on +inf.0 and -inf.0
Avoid tripping into +nan.0 by using 0 instead of 0.0 for the imaginary part of a real number and by using `atan` with two arguments instead of one. original commit: e3f499adfbcbe94726fe11869ca23176fa2c3b78
This commit is contained in:
parent
d31368fc09
commit
5f92ffa3c4
|
@ -2816,6 +2816,10 @@
|
|||
(let ([x 0.5+1.5i]) (cfl~= (asin (sin x)) x))
|
||||
(let ([x 0.5-1.5i]) (cfl~= (asin (sin x)) x))
|
||||
(let ([z 2.2-1.1i]) (cfl~= (asin z) (/ (asinh (* +1.0i z)) +1.0i)))
|
||||
(fl~= 1.5707963267948966 (real-part (asin +inf.0)))
|
||||
(eqv? -inf.0 (imag-part (asin +inf.0)))
|
||||
(fl~= -1.5707963267948966 (real-part (asin -inf.0)))
|
||||
(eqv? +inf.0 (imag-part (asin -inf.0)))
|
||||
)
|
||||
|
||||
(mat acos
|
||||
|
@ -2834,6 +2838,8 @@
|
|||
(* +1.0i (sqrt (/ (- 1 z) 2))))))
|
||||
+1.0i)))
|
||||
(let ([x 10+10.0i]) (cfl~= (+ (asin x) (acos x)) (/ pi 2)))
|
||||
(fl~= 1.5707963267948966 (real-part (acos -inf.0i)))
|
||||
(eqv? +inf.0 (imag-part (acos -inf.0i)))
|
||||
)
|
||||
|
||||
(mat atan
|
||||
|
|
6
s/5_3.ss
6
s/5_3.ss
|
@ -468,7 +468,7 @@
|
|||
[z+ (cflsqrt (cfl+ 1.0 z))])
|
||||
(let ([a (cfl-real-part z-)] [b (cfl-imag-part z-)]
|
||||
[c (cfl-real-part z+)] [d (cfl-imag-part z+)])
|
||||
(fl-make-rectangular (fl* 2.0 ($flatan (fl/ a c)))
|
||||
(fl-make-rectangular (fl* 2.0 (flatan2 a c))
|
||||
(flasinh (fl- (fl* b c) (fl* a d))))))))
|
||||
|
||||
(define cflasin
|
||||
|
@ -484,7 +484,9 @@
|
|||
(let ([a (cfl-real-part z-)] [b (cfl-imag-part z-)]
|
||||
[c (cfl-real-part z+)] [d (cfl-imag-part z+)])
|
||||
(fl-make-rectangular
|
||||
($flatan (fl/ (cfl-real-part z) (fl- (fl* a c) (fl* b d))))
|
||||
(flatan2 (cfl-real-part z) (if (flonum? z)
|
||||
0.0
|
||||
(fl- (fl* a c) (fl* b d))))
|
||||
(flasinh (fl- (fl* a d) (fl* b c))))))))
|
||||
|
||||
(define cflasinh
|
||||
|
|
Loading…
Reference in New Issue
Block a user