Added various geom functions to runtime including asin, acos, tan

This commit is contained in:
Abdulaziz Ghuloum 2007-09-02 20:53:28 -04:00
parent d785d40935
commit 38a60b4d84
3 changed files with 62 additions and 15 deletions

Binary file not shown.

View File

@ -77,6 +77,40 @@ ikrt_fl_cos(ikp x, ikpcb* pcb){
return r;
}
ikp
ikrt_fl_tan(ikp x, ikpcb* pcb){
ikp r = ik_alloc(pcb, flonum_size) + vector_tag;
ref(r, -vector_tag) = (ikp)flonum_tag;
flonum_data(r) = tan(flonum_data(x));
return r;
}
ikp
ikrt_fl_asin(ikp x, ikpcb* pcb){
ikp r = ik_alloc(pcb, flonum_size) + vector_tag;
ref(r, -vector_tag) = (ikp)flonum_tag;
flonum_data(r) = asin(flonum_data(x));
return r;
}
ikp
ikrt_fl_acos(ikp x, ikpcb* pcb){
ikp r = ik_alloc(pcb, flonum_size) + vector_tag;
ref(r, -vector_tag) = (ikp)flonum_tag;
flonum_data(r) = acos(flonum_data(x));
return r;
}
ikp
ikrt_fl_atan(ikp x, ikpcb* pcb){
ikp r = ik_alloc(pcb, flonum_size) + vector_tag;
ref(r, -vector_tag) = (ikp)flonum_tag;
flonum_data(r) = atan(flonum_data(x));
return r;
}
ikp
ikrt_fl_sqrt(ikp x, ikpcb* pcb){
@ -95,18 +129,6 @@ ikrt_fl_log(ikp x, ikpcb* pcb){
}
ikp
ikrt_fl_atan(ikp x, ikpcb* pcb){
ikp r = ik_alloc(pcb, flonum_size) + vector_tag;
ref(r, -vector_tag) = (ikp)flonum_tag;
flonum_data(r) = atan(flonum_data(x));
return r;
}
ikp
ikrt_fx_sin(ikp x, ikpcb* pcb){
ikp r = ik_alloc(pcb, flonum_size) + vector_tag;
@ -124,10 +146,26 @@ ikrt_fx_cos(ikp x, ikpcb* pcb){
}
ikp
ikrt_fx_sqrt(ikp x, ikpcb* pcb){
ikrt_fx_tan(ikp x, ikpcb* pcb){
ikp r = ik_alloc(pcb, flonum_size) + vector_tag;
ref(r, -vector_tag) = (ikp)flonum_tag;
flonum_data(r) = sqrt(unfix(x));
flonum_data(r) = tan(unfix(x));
return r;
}
ikp
ikrt_fx_asin(ikp x, ikpcb* pcb){
ikp r = ik_alloc(pcb, flonum_size) + vector_tag;
ref(r, -vector_tag) = (ikp)flonum_tag;
flonum_data(r) = asin(unfix(x));
return r;
}
ikp
ikrt_fx_acos(ikp x, ikpcb* pcb){
ikp r = ik_alloc(pcb, flonum_size) + vector_tag;
ref(r, -vector_tag) = (ikp)flonum_tag;
flonum_data(r) = acos(unfix(x));
return r;
}
@ -139,6 +177,15 @@ ikrt_fx_atan(ikp x, ikpcb* pcb){
return r;
}
ikp
ikrt_fx_sqrt(ikp x, ikpcb* pcb){
ikp r = ik_alloc(pcb, flonum_size) + vector_tag;
ref(r, -vector_tag) = (ikp)flonum_tag;
flonum_data(r) = sqrt(unfix(x));
return r;
}
ikp
ikrt_fx_log(ikp x, ikpcb* pcb){
ikp r = ik_alloc(pcb, flonum_size) + vector_tag;

View File

@ -86,7 +86,7 @@
[asin S ba se]
[assert C ba]
[assertion-violation S ba]
[atan S ba se]
[atan C ba se]
[boolean=? C ba]
[boolean? C ba se]
[car C ba se]