$TITLE 'Test correctness of centropy(x,y,d) intrinsic exceptions' (FNCENTRY,SEQ=359) $ontext centropy(x,y,delta) = x * log((x+delta)/(y+delta)) ENUM VAL ---- --- rcOK 0 rcFUNC 1 rcGRAD 2 rcHESS 3 rcSYSTEM 4 ecOK 0 ecDOMAIN 1 ecSINGULAR 2 ecOVERFLOW 3 Contributor: Steve Dirkse $offtext $include fnset_xy.inc reps = 2e-13; relToInput = 0; set T / t0 * t7, t101*t105 /, T1(T) / t0 * t7 /, T2(T) / t101*t105 /; $set OFLO 1.e299 scalar d / 1e-20 /; table data(T,V) x y d f_ fx_ fy_ fxx_ fxy_ fyy_ rc_ ec_ t0 1 1 -1 1 1 t1 1 -1 1 1 1 t2 1 0 1 1 2 t3 -1 1 1 1 1 t4 0 1 0 0 -%OFLO% %OFLO% -1 2 2 t5 1e298 1 0 %OFLO% 123456 -1e298 1e-198 -1 1e298 1 3 t6 1e151 1e-150 1e-150 123456 123456 -%OFLO% 1e-151 -5e149 %OFLO% 2 2 t7 1e100 1e-100 1e-100 123456 -5e199 1e-100 -5e099 %OFLO% 3 2 t101 1 -1 1 1 t102 1 0 1 2 t103 -1 1 1 1 t104 0 1 123456 123456 -1 t105 1e298 1 %OFLO% 123456 -1e298 1e-198 -1 1e298 1 3 ; data(T,'fx_' )$[sameas('t5',T) or sameas('t105',T)] = log(1e298) + 1; data(T,'fxx_')$[sameas('t5',T) or sameas('t105',T)] = data(T,'fxx_') * 1e-100; data('t6','f_') = 1e151 * [ log(1e151) - log(2e-150) ]; data('t6','fx_') = [ log(1e151) - log(2e-150) ] + 1; data('t7','f_') = 1e100 * [ log(1e100) - log(2e-100) ]; data('t7','fx_') = [ log(1e100) - log(2e-100) ] + 1; data('t104','fx_' ) = log(d); data('t104','fxx_') = 2 / d; data(T,'fyx_') = data(T,'fxy_'); loop {T1, data(T1, 'f') = centropy.value ( data(T1,'x'), data(T1,'y'), data(T1,'d')); data(T1, 'fx') = centropy.grad (1: data(T1,'x'), data(T1,'y'), data(T1,'d')); data(T1, 'fy') = centropy.grad (2: data(T1,'x'), data(T1,'y'), data(T1,'d')); data(T1,'fxx') = centropy.hess (1:1:data(T1,'x'), data(T1,'y'), data(T1,'d')); data(T1,'fxy') = centropy.hess (1:2:data(T1,'x'), data(T1,'y'), data(T1,'d')); data(T1,'fyx') = centropy.hess (2:1:data(T1,'x'), data(T1,'y'), data(T1,'d')); data(T1,'fyy') = centropy.hess (2:2:data(T1,'x'), data(T1,'y'), data(T1,'d')); data(T1, 'rc') = mathlastrc; data(T1, 'ec') = mathlastec; }; * if the third arg is not passed, it defaults to 1e-20 loop {T2, data(T2, 'f') = centropy.value ( data(T2,'x'), data(T2,'y')); data(T2, 'fx') = centropy.grad (1: data(T2,'x'), data(T2,'y')); data(T2, 'fy') = centropy.grad (2: data(T2,'x'), data(T2,'y')); data(T2,'fxx') = centropy.hess (1:1:data(T2,'x'), data(T2,'y')); data(T2,'fxy') = centropy.hess (1:2:data(T2,'x'), data(T2,'y')); data(T2,'fyx') = centropy.hess (2:1:data(T2,'x'), data(T2,'y')); data(T2,'fyy') = centropy.hess (2:2:data(T2,'x'), data(T2,'y')); data(T2, 'rc') = mathlastrc; data(T2, 'ec') = mathlastec; }; abort$(execerror lt 10) 'Should get execution errors getting func/grad/hess of centropy(x,y,d)'; execerror = 0; $include fntest_xy.inc