eval03.gms : 상수 컴파일 시간 평가 함수 테스트

설명

기능:

ABS ceil cos exp 사실 층 frac IfThen 로그 log2
log10 max mod mod PI 파워 라운드 사인 sin sleep
sqr sqrt 탄 트렁크

   ** ** 추가 테스트를 환영합니다 ** ** **

기여자: Alex

소형 모델 유형 :무료 슬롯


카테고리 : 무료 슬롯 테스트 라이브러리


메인 파일 : eval03.gms

$title 테스트 상수 컴파일 시간 평가 함수(EVAL03,SEQ=462)
$onText
기능:

ABS ceil cos exp 사실 층 frac IfThen 로그 log2
log10 max mod mod PI 파워 라운드 사인 sin sleep
sqr sqrt 탄 트렁크

** ** ** 추가 테스트를 환영합니다 ** ** **

기여자: 알렉스
$offText

$onDollar

f/abs,ceil,cos,exp,fact,floor,frac,ifthen,log,log2,log10,max,min,mod, 설정
        거듭제곱,라운드,부호,sin,sqr,sqrt,tan,trunc /
    c / 1*15 /
    v / 계산, 예상 /;

$onUNDF

테이블 res(f,c,v) 계산된 함수 값과 예상되는 함수 값

            계산된 예상
절대.1 [abs(-inf)] inf
절대.2 [abs(+inf)] inf
절대.3 [abs(undf)] undf

ceil.1 [ceil(-inf)] -inf
ceil.2 [ceil(+inf)] inf
ceil.3 [ceil(undf)] undf
ceil.4 [셀(0)] 0
ceil.5 [ceil(1.5)] 2
ceil.6 [ceil(-1.5)] -1

cos.1 [cos(-inf)] undf
cos.2 [cos(+inf)] undf
cos.3 [cos(undf)] undf

exp.1 [exp(-inf)] 0
exp.2 [exp(+inf)] inf
exp.3 [exp(undf)] undf
exp.4 [exp(0)] 1

사실.1 [사실(-inf)] undf
사실.2 [사실(+inf)] undf
사실.3 [사실(undf)] undf
사실.4 [사실(167)] undf
사실.5 [사실(0)] 1
사실.6 [사실(1)] 1
사실.7 [사실(2)] 2
사실.8 [사실(3)] 6
팩트.9 [팩트(20)] 2432902008176640000
* 다음 계승에 대한 기대값은 아래에서 계산됩니다.
* 무료 슬롯에서는 크거나 정확한 상수를 입력할 수 없습니다.
사실.10 [사실(30)] -1
사실.11 [사실(60)] -1
Fact.12 [팩트(90)] -1
사실.13 [사실(120)] -1
사실.14 [사실(150)] -1
사실.15 [사실(166)] -1

바닥.1 [바닥(-inf)] -inf
바닥.2 [바닥(+inf)] inf
바닥.3 [바닥(undf)] undf
바닥.4 [층(0)] 0
바닥.5 [층(1.5)] 1
바닥.6 [층(-1.5)] -2

frac.1 [frac(-inf)] undf
frac.2 [frac(+inf)] undf
frac.3 [frac(undf)] undf

ifthen.1 [ifthen(-inf,1,2)] 1
ifthen.2 [ifthen(+inf,1,2)] 1
ifthen.3 [ifthen(undf,1,2)] undf
ifthen.4 [ifthen(0,undf,4)] 4
ifthen.5 [ifthen(1,undf,5)] undf
ifthen.6 [ifthen(0,6,undf)] undf
ifthen.7 [ifthen(1,7,undf)] 7

log.1 [로그(-inf)] undf
log.2 [로그(-1)] undf
log.3 [로그(0)] -inf
log.4 [로그(+inf)] inf
log.5 [로그(undf)] undf

log2.1 [log2(-inf)] undf
log2.2 [log2(-1)] undf
log2.3 [log2(0)] -inf
log2.4 [log2(+inf)] inf
log2.5 [log2(undf)] undf

log10.1 [log10(-inf)] undf
log10.2 [log10(-1)] undf
로그10.3 [log10(0)] -inf
log10.4 [log10(+inf)] inf
log10.5 [log10(undf)] undf

최대.1 [최대(-inf,inf)] inf
최대 2 [최대(undf,0)] undf
최대.3 [최대(0,undf)] undf
최대 4 [최대(-1,1)] 1
최대.5 [최대(-inf,1)] 1
최대 6 [최대(inf,1)] inf
최대.7 [최대(-inf,1,inf)] inf

min.1 [최소(-inf,inf)] -inf
min.2 [최소(undf,0)] undf
min.3 [최소(0,undf)] undf
최소.4 [최소(-1,1)] -1
min.5 [최소(-inf,1)] -inf
최소.6 [최소(inf,1)] 1
최소.7 [최소(inf,1,5)] 1

mod.1 [mod(-inf,inf)] undf
mod.2 [mod(undf,0)] undf
mod.3 [mod(0,undf)] undf
mod.4 [mod(-1,1)] 0
mod.5 [mod(-inf,1)] undf
mod.6 [mod(inf,1)] undf

power.1 [전력(-inf,inf)] inf
power.2 [전력(undf,0)] undf
power.3 [전력(0,undf)] undf
전력.4 [전력(-1,1)] -1
power.5 [전력(-inf,2)] inf
power.6 [전력(inf,2)] inf
power.7 [전력(3,1.5)] undf
힘.8 [힘(10,0)] 1
힘.9 [힘(-10,0)] 1
power.10 [전력(0,0)] 1
power.11 [전력(0.5,inf)] 0
power.12 [전력(-0.5,inf)] 0
전력.13 [전력(0.5,-1)] 2
power.14 [전력(-inf,3)] -inf
power.15 [전력(0,-inf)] inf

round.1 [라운드(-inf,inf)] undf
round.2 [라운드(undf,0)] undf
round.3 [라운드(55.75,inf)] undf
round.4 [라운드(inf,2)] inf
round.5 [라운드(-inf,-10)] -inf
* 55.55는 eval07에서 분리된 문제를 일으켰습니다.
* 라운드.6 [라운드(55.55,1)] 55.5
round.6 [라운드(55.75,1)] 55.8
round.7 [라운드(55.75,0)] 56
round.8 [라운드(55.75,-1)] 60
round.9 [라운드(55.75,-2)] 100
round.10 [라운드(55.75,-3)] 0

sign.1 [부호(-inf)] -1
sign.2 [부호(+inf)] 1
sign.3 [sign(undf)] undf
sign.4 [부호(0)] 0

sin.1 [죄(-inf)] undf
sin.2 [죄(+inf)] undf
sin.3 [죄(undf)] undf
죄.4 [죄(0)] 0

sqr.1 [sqr(-inf)] inf
sqr.2 [sqr(+inf)] inf
sqr.3 [sqr(undf)] undf
sqr.4 [sqr(0)] 0

sqrt.1 [sqrt(-inf)] undf
sqrt.2 [sqrt(+inf)] inf
sqrt.3 [sqrt(undf)] undf
sqrt.4 [sqrt(0)] 0
sqrt.5 [sqrt(-1)] undf

tan.1 [tan(-inf)] undf
tan.2 [tan(+inf)] undf
tan.3 [tan(undf)] undf
tan.4 [탄(0)] 0

trunc.1 [trunc(-inf)] -inf
trunc.2 [trunc(+inf)] inf
trunc.3 [trunc(undf)] undf
trunc.4 [trunc(55.55)] 55
trunc.5 [trunc(-55.55)] -55

매개변수
  diff(f,c,v) 차이점
  delta(f,c) '계산됨 - 예상됨'
  ;
세트
  fc(f,c) 차이점
  cc(c) '조정할 사실 값' / 5 * 15 /
  ;
스칼라 t, i;
t = res('사실','9','예상');
i = 21 ~ 30,
  t = t * i;
;  
res('사실','10','예상') = t;
i = 31 ~ 60,
  t = t * i;
;  
res('사실','11','예상') = t;
i = 61 ~ 90,
  t = t * i;
;  
res('사실','12','예상') = t;
i = 91에서 120까지,
  t = t * i;
;  
res('사실','13','예상') = t;
i = 121에서 150까지,
  t = t * i;
;  
res('사실','14','예상') = t;
i = 151에서 166까지,
  t = t * i;
;  
res('사실','15','예상') = t;

* 실제로 작은 상대 오류를 패치합니다. 예상되는 계산
* 이 테스트의 값은 100% 정확하지 않습니다.
fc('사실',cc) = 예;
delta(fc) = abs(res(fc,'계산') - res(fc,'예상')) / res(fc,'예상');
fc(f,c) = fc(f,c) 및 [델타(f,c) < 1e-15];
res(fc,'예상') = res(fc,'계산됨');
fc(f,c) = 아니요;
델타 표시;
델타(f,c) = 0;

fc(f,c) = res(f,c,'계산됨') <> res(f,c,'예상됨');
diff(fc,v) = res(fc,v);
delta(fc) = res(fc,'계산됨') - res(fc,'예상');

디스플레이 차이, 델타;

abort$card(diff) '결과가 일치하지 않습니다';