📄 math.c
字号:
/* math.c
*
* (C) Copyright Dec 20 1998, Edmond J. Breen.
* ALL RIGHTS RESERVED.
* This code may be copied for personal, non-profit use only.
*
*/
/* This file is broken into 2 parts
* the first part defines the interface routines
* and the 2nd part adds the interface routine
* to EiC's look up tables.
*/
#include <math.h>
#include <stdlib.h>
#include "eic.h"
/* MATH.H STUFF */
val_t eic_div(void)
{
/* rem: the return type is a structure;
* therefore, the first slot is used for
* a hidden parameter
*/
val_t v;
static div_t d; /* create some memory */
/* skip argument -1 & start at -2 */
int num = arg(1,getargs(),int);
int dem = arg(2,getargs(),int);
d.quot = num/dem;
d.rem = num - dem * d.quot;
if(d.quot < 0 && 0 < d.rem) {
d.quot += 1;
d.rem -= dem;
}
/* set safe */
v.p.sp = v.p.p = &d;
v.p.ep = (char*)&d + sizeof(div_t);
return v;
}
val_t eic_ldiv(void)
{
val_t v;
static ldiv_t d; /* create some memory */
/* skip argument -1 & start at -2 */
long num = arg(1,getargs(),long);
long dem = arg(2,getargs(),long);
d.quot = num/dem;
d.rem = num - dem * d.quot;
if(d.quot < 0 && 0 < d.rem) {
d.quot += 1;
d.rem -= dem;
}
/* set safe */
v.p.sp = v.p.p = &d;
v.p.ep = (char*)&d + sizeof(ldiv_t);
return v;
}
val_t eic_acos(void)
{
val_t v;
v.dval = acos(arg(0,getargs(),double));
return v;
}
val_t eic_asin(void)
{
val_t v;
v.dval = asin(arg(0,getargs(),double));
return v;
}
val_t eic_atan(void)
{
val_t v;
v.dval = atan(arg(0,getargs(),double));
return v;
}
val_t eic_atan2(void)
{
val_t v;
v.dval = atan2(arg(0,getargs(),double), arg(1,getargs(),double));
return v;
}
val_t eic_cos(void)
{
val_t v;
v.dval = cos(arg(0,getargs(),double));
return v;
}
val_t eic_sin(void)
{
val_t v;
v.dval = sin(arg(0,getargs(),double));
return v;
}
val_t eic_tan(void)
{
val_t v;
v.dval = tan(arg(0,getargs(),double));
return v;
}
val_t eic_cosh(void)
{
val_t v;
v.dval = cosh(arg(0,getargs(),double));
return v;
}
val_t eic_sinh(void)
{
val_t v;
v.dval = sinh(arg(0,getargs(),double));
return v;
}
val_t eic_tanh(void)
{
val_t v;
v.dval = tanh(arg(0,getargs(),double));
return v;
}
val_t eic_exp(void)
{
val_t v;
v.dval = exp(arg(0,getargs(),double));
return v;
}
val_t eic_frexp(void)
{
val_t v;
v.dval = frexp(arg(0,getargs(),double), arg(1,getargs(),ptr_t).p);
return v;
}
val_t eic_ldexp(void)
{
val_t v;
v.dval = ldexp(arg(0,getargs(),double), arg(1,getargs(),int));
return v;
}
val_t eic_log(void)
{
val_t v;
v.dval = log(arg(0,getargs(),double));
return v;
}
val_t eic_log10(void)
{
val_t v;
v.dval = log10(arg(0,getargs(),double));
return v;
}
val_t eic_modf(void)
{
val_t v;
v.dval = modf(arg(0,getargs(),double), arg(1,getargs(),ptr_t).p);
return v;
}
val_t eic_pow(void)
{
val_t v;
v.dval = pow(arg(0,getargs(),double), arg(1,getargs(),double));
return v;
}
val_t eic_sqrt(void)
{
val_t v;
v.dval = sqrt(arg(0,getargs(),double));
return v;
}
val_t eic_ceil(void)
{
val_t v;
v.dval = ceil(arg(0,getargs(),double));
return v;
}
val_t eic_fabs(void)
{
val_t v;
v.dval = fabs(arg(0,getargs(),double));
return v;
}
val_t eic_floor(void)
{
val_t v;
v.dval = floor(arg(0,getargs(),double));
return v;
}
val_t eic_fmod(void)
{
val_t v;
v.dval = fmod(arg(0,getargs(),double), arg(1,getargs(),double));
return v;
}
/***********************************************************************************/
void module_math(void)
{
/* math.h stuff */
EiC_add_builtinfunc("div",eic_div);
EiC_add_builtinfunc("ldiv",eic_ldiv);
EiC_add_builtinfunc("acos",eic_acos);
EiC_add_builtinfunc("asin",eic_asin);
EiC_add_builtinfunc("atan",eic_atan);
EiC_add_builtinfunc("atan2",eic_atan2);
EiC_add_builtinfunc("cos",eic_cos);
EiC_add_builtinfunc("sin",eic_sin);
EiC_add_builtinfunc("tan",eic_tan);
EiC_add_builtinfunc("cosh",eic_cosh);
EiC_add_builtinfunc("sinh",eic_sinh);
EiC_add_builtinfunc("tanh",eic_tanh);
EiC_add_builtinfunc("exp",eic_exp);
EiC_add_builtinfunc("frexp",eic_frexp);
EiC_add_builtinfunc("ldexp",eic_ldexp);
EiC_add_builtinfunc("log",eic_log);
EiC_add_builtinfunc("log10",eic_log10);
EiC_add_builtinfunc("modf",eic_modf);
EiC_add_builtinfunc("pow",eic_pow);
EiC_add_builtinfunc("sqrt",eic_sqrt);
EiC_add_builtinfunc("ceil",eic_ceil);
EiC_add_builtinfunc("fabs",eic_fabs);
EiC_add_builtinfunc("floor",eic_floor);
EiC_add_builtinfunc("fmod",eic_fmod);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -