76 lines · 1.6 KB · C
RawDownload
#include <u.h>#include <libc.h>#include <bio.h>#include "aa.h"#include "aa_math.h" #define CFUNC1(func) \	static aaObject * \	cf_##func(aaContext *ctx, aaObject *arg) \	{ \		aaNumber x = aa_tonumber(ctx, aa_nextarg(ctx, &arg, 0)); \		return aa_number(ctx, aNumber(func(x.r), 0.0)); \	} #define CFUNC2(func) \	static aaObject * \	cf_##func(aaContext *ctx, aaObject *arg) \	{ \		aaNumber x = aa_tonumber(ctx, aa_nextarg(ctx, &arg, 0)); \		aaNumber y = aa_tonumber(ctx, aa_nextarg(ctx, &arg, 0)); \		return aa_number(ctx, aNumber(func(x.r, y.r), 0.0)); \	} #define FUNCS \	CFUNC1(sin); \	CFUNC1(cos); \	CFUNC1(tan); \	CFUNC1(asin); \	CFUNC1(acos); \	CFUNC1(exp); \	CFUNC1(log); \	CFUNC1(sqrt); \	CFUNC1(floor); \	CFUNC1(log10); \	CFUNC1(sinh); \	CFUNC1(cosh); \	CFUNC1(tanh); \ FUNCSCFUNC1(fabs);CFUNC1(ceil);CFUNC2(pow); static aaObject *cf_atan2(aaContext *ctx, aaObject *arg){	aaNumber x = aa_tonumber(ctx, aa_nextarg(ctx, &arg, 0));	aaObject *yo = aa_nextarg(ctx, &arg, 1);	aaNumber y = yo != nil ? aa_tonumber(ctx, yo) : aNumber(1.0, 0.0);	return aa_number(ctx, aNumber(atan2(x.r, y.r), 0.0));} static aaObject *cf_truncate(aaContext *ctx, aaObject *arg){	aaNumber x = aa_tonumber(ctx, aa_nextarg(ctx, &arg, 0));	modf(x.r, &x.r);	return aa_number(ctx, x);} #undef CFUNC1#undef CFUNC2#define CFUNC(func, name) aa_set(ctx, aa_symbol(ctx, name), aa_cfunc(ctx, cf_##func))#define CFUNC1(x) CFUNC(x, #x)#define CFUNC2(x) CFUNC(x, #x) voidaa_include_math(aaContext *ctx){	FUNCS;	CFUNC(fabs, "abs");	CFUNC(ceil, "ceiling");	CFUNC(pow, "expt");	CFUNC(atan2, "atan");	CFUNC(truncate, "truncate");}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t