From a0f698683233541fca10ef5f82e6428f04665ec9 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Tue, 22 Nov 2022 17:27:01 -0500 Subject: [PATCH] Hyperbolic trig --- src/builtins.h | 2 +- src/builtins/arithm.c | 22 ++++++++++++++-------- src/builtins/sysfn.c | 2 +- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/builtins.h b/src/builtins.h index 6f881265..e27d4550 100644 --- a/src/builtins.h +++ b/src/builtins.h @@ -17,7 +17,7 @@ /*internal.c*/M(itype,"•internal.Type") M(elType,"•internal.ElType") M(refc,"•internal.Refc") M(isPure,"•internal.IsPure") A(info,"•internal.Info") M(heapDump,"•internal.HeapDump") \ /*internal.c*/M(squeeze,"•internal.Squeeze") M(deepSqueeze,"•internal.DeepSqueeze") D(eequal,"•internal.EEqual") A(internalTemp,"•internal.Temp") \ /*internal.c*/D(variation,"•internal.Variation") A(listVariations,"•internal.ListVariations") M(clearRefs,"•internal.ClearRefs") M(unshare,"•internal.Unshare") \ -/* arithm.c*/M(sin,"•math.Sin") M(cos,"•math.Cos") M(tan,"•math.Tan") M(asin,"•math.Asin") M(acos,"•math.Acos") M(atan,"•math.Atan") D(atan2,"•math.Atan2") D(gcd,"•math.GCD") D(lcm,"•math.LCM") +/* arithm.c*/M(sin,"•math.Sin") M(cos,"•math.Cos") M(tan,"•math.Tan") M(asin,"•math.Asin") M(acos,"•math.Acos") M(atan,"•math.Atan") D(atan2,"•math.Atan2") M(sinh,"•math.Sinh") M(cosh,"•math.Cosh") M(tanh,"•math.Tanh") M(asinh,"•math.Asinh") M(acosh,"•math.Acosh") M(atanh,"•math.Atanh") D(gcd,"•math.GCD") D(lcm,"•math.LCM") #define FOR_PM1(A,M,D) \ /*md1.c*/A(tbl,"⌜") A(each,"¨") A(fold,"´") A(scan,"`") A(const,"˙") A(swap,"˜") A(cell,"˘") A(insert,"˝") \ diff --git a/src/builtins/arithm.c b/src/builtins/arithm.c index 61c4f0a5..1fd45f74 100644 --- a/src/builtins/arithm.c +++ b/src/builtins/arithm.c @@ -92,12 +92,12 @@ GC1f(root, sqrt(xv), "√: Getting square root of non-number") #define P1(N) { if(isArr(x)) { SLOW1("arithm " #N, x); return arith_recm(N##_c1, x); } } B pow_c1(B t, B x) { if (isF64(x)) return m_f64( exp(x.f)); P1( pow); thrM("⋆: Getting exp of non-number"); } B log_c1(B t, B x) { if (isF64(x)) return m_f64( log(x.f)); P1( log); thrM("⋆⁼: Getting log of non-number"); } -B sin_c1(B t, B x) { if (isF64(x)) return m_f64( sin(x.f)); P1( sin); thrM("•math.Sin: Argument contained non-number"); } -B cos_c1(B t, B x) { if (isF64(x)) return m_f64( cos(x.f)); P1( cos); thrM("•math.Cos: Argument contained non-number"); } -B tan_c1(B t, B x) { if (isF64(x)) return m_f64( tan(x.f)); P1( tan); thrM("•math.Tan: Argument contained non-number"); } -B asin_c1(B t, B x) { if (isF64(x)) return m_f64( asin(x.f)); P1( asin); thrM("•math.Asin: Argument contained non-number"); } -B acos_c1(B t, B x) { if (isF64(x)) return m_f64( acos(x.f)); P1( acos); thrM("•math.Acos: Argument contained non-number"); } -B atan_c1(B t, B x) { if (isF64(x)) return m_f64( atan(x.f)); P1( atan); thrM("•math.Atan: Argument contained non-number"); } +#define MATH(n,N) \ + B n##_c1(B t, B x) { if (isF64(x)) return m_f64(n(x.f)); P1(n); thrM("•math." #N ": Argument contained non-number"); } +#define TRIG(n,N) MATH(n,N) MATH(a##n,A##n) MATH(n##h,N##h) MATH(a##n##h,A##n##h) +TRIG(sin,Sin) TRIG(cos,Cos) TRIG(tan,Tan) +#undef MATH +#undef TRIG #undef P1 B lt_c1(B t, B x) { return m_atomUnit(x); } @@ -109,8 +109,8 @@ static B mathNS; B getMathNS() { if (mathNS.u == 0) { #define F(X) inc(bi_##X), - Body* d = m_nnsDesc("sin","cos","tan","asin","acos","atan","atan2","gcd","lcm"); - mathNS = m_nns(d, F(sin)F(cos)F(tan)F(asin)F(acos)F(atan)F(atan2)F(gcd)F(lcm)); + Body* d = m_nnsDesc("sin","cos","tan","asin","acos","atan","atan2","sinh","cosh","tanh","asinh","acosh","atanh","gcd","lcm"); + mathNS = m_nns(d, F(sin)F(cos)F(tan)F(asin)F(acos)F(atan)F(atan2)F(sinh)F(cosh)F(tanh)F(asinh)F(acosh)F(atanh)F(gcd)F(lcm)); #undef F gc_add(mathNS); } @@ -130,4 +130,10 @@ void arith_init() { c(BFn,bi_asin)->im = sin_c1; c(BFn,bi_acos)->im = cos_c1; c(BFn,bi_atan)->im = tan_c1; + c(BFn,bi_sinh)->im = asinh_c1; + c(BFn,bi_cosh)->im = acosh_c1; + c(BFn,bi_tanh)->im = atanh_c1; + c(BFn,bi_asinh)->im = sinh_c1; + c(BFn,bi_acosh)->im = cosh_c1; + c(BFn,bi_atanh)->im = tanh_c1; } diff --git a/src/builtins/sysfn.c b/src/builtins/sysfn.c index 1c2a0359..50ee562b 100644 --- a/src/builtins/sysfn.c +++ b/src/builtins/sysfn.c @@ -1551,7 +1551,7 @@ u32* dsv_text[] = { U"•file.MapBytes",U"•file.Modified",U"•file.Name",U"•file.Parent",U"•file.Remove",U"•file.Rename",U"•file.Size",U"•file.Type", U"•internal.ClearRefs",U"•internal.DeepSqueeze",U"•internal.EEqual",U"•internal.ElType",U"•internal.HeapDump",U"•internal.Info",U"•internal.IsPure",U"•internal.ListVariations",U"•internal.Refc",U"•internal.Squeeze",U"•internal.Temp",U"•internal.Type",U"•internal.Unshare",U"•internal.Variation", - U"•math.Acos",U"•math.Asin",U"•math.Atan",U"•math.Atan2",U"•math.Cos",U"•math.GCD",U"•math.LCM",U"•math.Sin",U"•math.Tan", + U"•math.Acos",U"•math.Acosh",U"•math.Asin",U"•math.Asinh",U"•math.Atan",U"•math.Atan2",U"•math.Atanh",U"•math.Cos",U"•math.Cosh",U"•math.GCD",U"•math.LCM",U"•math.Sin",U"•math.Sinh",U"•math.Tan",U"•math.Tanh", U"•rand.Deal",U"•rand.Range",U"•rand.Subset", U"•term.CharB",U"•term.CharN",U"•term.ErrRaw",U"•term.Flush",U"•term.OutRaw",U"•term.RawMode", NULL