@@ -15,23 +15,22 @@ export function apply(
1515const ce = expr . engine ;
1616
1717let result :number | Complex | Decimal | undefined = undefined ;
18- if ( expr . im !== 0 ) result = complexFn ?.( ce . complex ( expr . re ?? 0 , expr . im ) ) ;
18+ if ( expr . im !== 0 ) result = complexFn ?.( ce . complex ( expr . re , expr . im ) ) ;
1919else {
2020const bigRe = expr . bignumRe ;
2121if ( bigRe !== undefined && bignumPreferred ( ce ) && bigFn )
2222result = bigFn ( bigRe ) ;
2323else {
2424const re = expr . re ;
25- console . assert ( re !== undefined ) ;
26- if ( bignumPreferred ( ce ) && bigFn ) result = bigFn ( ce . bignum ( re ! ) ) ;
27- else result = fn ( re ! ) ;
25+ if ( bignumPreferred ( ce ) && bigFn ) result = bigFn ( ce . bignum ( re ) ) ;
26+ else result = fn ( re ) ;
2827}
2928}
3029
3130if ( result === undefined ) return undefined ;
3231if ( result instanceof Complex )
3332return ce . number (
34- ce . _numericValue ( { decimal :ce . chop ( result . re ) , im :ce . chop ( result . im ) } )
33+ ce . _numericValue ( { re :ce . chop ( result . re ) , im :ce . chop ( result . im ) } )
3534) ;
3635return ce . number ( ce . chop ( result ) ) ;
3736}
@@ -47,38 +46,41 @@ export function apply2(
4746return undefined ;
4847
4948const ce = expr1 . engine ;
49+
5050let result :number | Complex | Decimal | undefined = undefined ;
5151if ( expr1 . im !== 0 || expr2 . im !== 0 ) {
5252result = complexFn ?.(
53- ce . complex ( expr1 . re ?? 0 , expr1 . im ) ,
54- ce . complex ( expr2 . re ?? 0 , expr2 . im )
53+ ce . complex ( expr1 . re , expr1 . im ) ,
54+ ce . complex ( expr2 . re , expr2 . im )
5555) ;
5656}
5757
58- if ( bigFn ) {
59- const bigRe1 = expr1 . bignumRe ;
60- const bigRe2 = expr2 . bignumRe ;
61- if ( bigRe1 !== undefined && bigRe2 !== undefined ) {
62- if ( bignumPreferred ( ce ) && bigFn ) result = bigFn ( bigRe1 , bigRe2 ) ;
63- else result = fn ( bigRe1 . toNumber ( ) , bigRe2 . toNumber ( ) ) ;
58+ if ( result === undefined && bigFn ) {
59+ let bigRe1 = expr1 . bignumRe ;
60+ let bigRe2 = expr2 . bignumRe ;
61+ if ( bigRe1 !== undefined || bigRe2 !== undefined ) {
62+ bigRe1 ??= ce . bignum ( expr1 . re ) ;
63+ bigRe2 ??= ce . bignum ( expr2 . re ) ;
64+ result = bigFn ( bigRe1 , bigRe2 ) ;
6465}
6566}
66-
67- const re1 = expr1 . re ;
68- const re2 = expr2 . re ;
69- if ( re1 !== undefined && re2 !== undefined ) {
70- if ( bignumPreferred ( ce ) && bigFn )
71- result = bigFn (
72- ce . bignum ( expr1 . bignumRe ?? re1 ) ,
73- ce . bignum ( expr2 . bignumRe ?? re2 )
74- ) ;
75- else result = fn ( re1 , re2 ) ;
67+ if ( result === undefined ) {
68+ const re1 = expr1 . re ;
69+ const re2 = expr2 . re ;
70+ if ( ! isNaN ( re1 ) && ! isNaN ( re2 ) ) {
71+ if ( bignumPreferred ( ce ) && bigFn )
72+ result = bigFn (
73+ ce . bignum ( expr1 . bignumRe ?? re1 ) ,
74+ ce . bignum ( expr2 . bignumRe ?? re2 )
75+ ) ;
76+ else result = fn ( re1 , re2 ) ;
77+ }
7678}
7779
7880if ( result === undefined ) return undefined ;
7981if ( result instanceof Complex )
8082return ce . number (
81- ce . _numericValue ( { decimal :ce . chop ( result . re ) , im :ce . chop ( result . im ) } )
83+ ce . _numericValue ( { re :ce . chop ( result . re ) , im :ce . chop ( result . im ) } )
8284) ;
8385return ce . number ( ce . chop ( result ) ) ;
8486}