tmath3.cef
この外部関数では、指数関数、対数関数、そして特殊べき乗関数のすべてがテストされる。その際に使われる値は、各関数に固有なもの数種類である。1つか2つのテストでは、正確な結果の生成が必要とされていることに注意が必要である。すべてのテストにパスすると、次のメッセージが出力される。
SUCCESS testing function, part 3
インタープリタには、このテストにパスすることが要求される。
#指数関数、対数関数、特殊べき乗関数のすべてのテスト :define DBL_EPSILON 2.2204460492503131e\-016 func approx return (@1 ? (abs ((@1 - @0) / @1)) (abs @0)) < (DBL_EPSILON * 4.0) endfunc :ans 0 :assert 1 :gfloat 16 :define e 2.71828182845904523536 :define ln2 0.69314718055994530942 :define rthalf 0.70710678118654752440 assert approx (acosh 1.0) 0.0 assert approx (acosh ((e + 1.0 / e) / 2.0)) 1.0 assert approx (asinh ([-](e - 1.0 / e) / 2.0)) \-1.0 assert approx (asinh 0.0) 0.0 assert approx (asinh ((e - 1.0 / e) / 2.0)) 1.0 assert approx (atanh ([-](e * e - 1.0) / (e * e + 1.0))) \-1.0 assert approx (atanh 0.0) 0.0 assert approx (atanh ((e * e - 1.0) / (e * e + 1.0))) 1.0 assert approx (cosh \-1.0) ((e + 1.0 / e) / 2.0) assert approx (cosh 0.0) 1.0 assert approx (cosh 1.0) ((e + 1.0 / e) / 2.0) assert approx (exp \-1.0) (1.0 / e) assert approx (exp 0.0) 1.0 assert approx (exp ln2) 2.0 assert approx (exp 1.0) e assert approx (exp 3.0) (e * e * e) assert approx (exp10 0.0) 1.0 assert approx (exp10 (1.0 - log10 2.0)) 5.0 assert approx (exp10 5.0) 1e5 assert log 1.0 == 0.0 assert approx (log e) 1.0 assert approx (log (e * e * e)) 3.0 assert approx (log10 1.0) 0.0 assert approx (log10 5.0) (1.0 - log10 2.0) assert approx (log10 1e5) 5.0 assert approx (pow \-2.5 2.0) 6.25 assert approx (pow \-2.0 \-3.0) \-0.125 assert pow 0.0 6.0 == 0.0 assert approx (pow 2.0 \-0.5) rthalf assert approx (pow 3.0 4.0) 81.0 assert approx (sinh \-1.0) ([-](e - 1.0 / e) / 2.0) assert approx (sinh 0.0) 0.0 assert approx (sinh 1.0) ((e - 1.0 / e) / 2.0) assert approx (sqr 0.0) 0.0 assert approx (sqr rthalf) 0.5 assert approx (sqr 1.0) 1.0 assert approx (sqr (1.0 / rthalf)) 2.0 assert approx (sqr 12.0) 144.0 assert approx (sqrt 0.0) 0.0 assert approx (sqrt 0.5) rthalf assert approx (sqrt 1.0) 1.0 assert approx (sqrt 2.0) (1.0 / rthalf) assert approx (sqrt 144.0) 12.0 assert approx (tanh \-1.0) ([-](e * e - 1.0) / (e * e + 1.0)) assert approx (tanh 0.0) 0.0 assert approx (tanh 1.0) ((e * e - 1.0) / (e * e + 1.0)) :println ["SUCCESS testing function, part 3]
参考:「標準Cライブラリ」 P.J.プラウガー=著 トッパン