1*ae082addSchristos.\" 2*ae082addSchristos.\" Copyright (c) 2022 The NetBSD Foundation, Inc. 3*ae082addSchristos.\" All rights reserved. 4*ae082addSchristos.\" 5*ae082addSchristos.\" This code is derived from software contributed to The NetBSD Foundation 6*ae082addSchristos.\" by Phillip Rulon 7*ae082addSchristos.\" 8*ae082addSchristos.\" Redistribution and use in source and binary forms, with or without 9*ae082addSchristos.\" modification, are permitted provided that the following conditions 10*ae082addSchristos.\" are met: 11*ae082addSchristos.\" 1. Redistributions of source code must retain the above copyright 12*ae082addSchristos.\" notice, this list of conditions and the following disclaimer. 13*ae082addSchristos.\" 2. Redistributions in binary form must reproduce the above copyright 14*ae082addSchristos.\" notice, this list of conditions and the following disclaimer in the 15*ae082addSchristos.\" documentation and/or other materials provided with the distribution. 16*ae082addSchristos.\" 17*ae082addSchristos.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 18*ae082addSchristos.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 19*ae082addSchristos.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 20*ae082addSchristos.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 21*ae082addSchristos.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22*ae082addSchristos.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23*ae082addSchristos.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24*ae082addSchristos.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25*ae082addSchristos.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26*ae082addSchristos.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27*ae082addSchristos.\" POSSIBILITY OF SUCH DAMAGE. 28*ae082addSchristos.\" 29*ae082addSchristos.Dd November 2, 2022 30*ae082addSchristos.Dt LIBM 3lua 31*ae082addSchristos.Os 32*ae082addSchristos.Sh NAME 33*ae082addSchristos.Nm libm 34*ae082addSchristos.Nd Lua interface to the 35*ae082addSchristos.Xr math 3 36*ae082addSchristoslibrary 37*ae082addSchristos.Sh SYNOPSIS 38*ae082addSchristos.Cd "local lm = require 'libm'" 39*ae082addSchristos.Sh DESCRIPTION 40*ae082addSchristosThe 41*ae082addSchristos.Nm 42*ae082addSchristosLua binding provides access to the 43*ae082addSchristos.Xr math 3 44*ae082addSchristoslibrary. If these functions are given an argument outside the domain 45*ae082addSchristosof the function the return value will be NaN. This can be checked with 46*ae082addSchristoslm.isnan(). 47*ae082addSchristos.Pp 48*ae082addSchristosMany of these functions have native equivalents in the Lua math library. 49*ae082addSchristosOthers, like 50*ae082addSchristos.Xr round 3 , 51*ae082addSchristos.Xr cbrt 3 , 52*ae082addSchristosand the hyperbolic trigonometry functions, are not provided without an 53*ae082addSchristosauxiliary module. The functions that are redundant are provided for 54*ae082addSchristoscompleteness. 55*ae082addSchristos.Pp 56*ae082addSchristosSince these functions map quite closely to the functions in the math 57*ae082addSchristoslibrary, detailed information about their behavior can be found in the 58*ae082addSchristosman pages for each function in section 3 of the manual. 59*ae082addSchristos.Ss List of Functions 60*ae082addSchristos.Bl -column "copysignX" "gammaX3XX" "inverse trigonometric funcX" 61*ae082addSchristos.It Sy Name Ta Sy Man page Ta Sy Description Ta 62*ae082addSchristos.It lm.acos Ta Xr acos 3 Ta inverse trigonometric function Ta 63*ae082addSchristos.It lm.acosh Ta Xr acosh 3 Ta inverse hyperbolic function Ta 64*ae082addSchristos.It lm.asin Ta Xr asin 3 Ta inverse trigonometric function Ta 65*ae082addSchristos.It lm.asinh Ta Xr asinh 3 Ta inverse hyperbolic function Ta 66*ae082addSchristos.It lm.atan Ta Xr atan 3 Ta inverse trigonometric function Ta 67*ae082addSchristos.It lm.atanh Ta Xr atanh 3 Ta inverse hyperbolic function Ta 68*ae082addSchristos.It lm.atan2 Ta Xr atan2 3 Ta inverse trigonometric function Ta 69*ae082addSchristos.It lm.cbrt Ta Xr sqrt 3 Ta cube root Ta 70*ae082addSchristos.It lm.ceil Ta Xr ceil 3 Ta integer no less than Ta 71*ae082addSchristos.It lm.copysign Ta Xr copysign 3 Ta copy sign bit Ta 72*ae082addSchristos.It lm.cos Ta Xr cos 3 Ta trigonometric function Ta 73*ae082addSchristos.It lm.cosh Ta Xr cosh 3 Ta hyperbolic function Ta 74*ae082addSchristos.It lm.erf Ta Xr erf 3 Ta error function Ta 75*ae082addSchristos.It lm.erfc Ta Xr erf 3 Ta complementary error function Ta 76*ae082addSchristos.It lm.exp Ta Xr exp 3 Ta base e exponential Ta 77*ae082addSchristos.It lm.exp2 Ta Xr exp2 3 Ta base 2 exponential Ta 78*ae082addSchristos.It lm.expm1 Ta Xr expm1 3 Ta exp(x)\-1 Ta 79*ae082addSchristos.It lm.fabs Ta Xr fabs 3 Ta absolute value Ta 80*ae082addSchristos.It lm.fdim Ta Xr erf 3 Ta positive difference Ta 81*ae082addSchristos.It lm.finite Ta Xr finite 3 Ta test for finity Ta 82*ae082addSchristos.It lm.floor Ta Xr floor 3 Ta integer no greater than Ta 83*ae082addSchristos.It lm.fma Ta Xr fmod 3 Ta fused multiply-add Ta 84*ae082addSchristos.It lm.fmax Ta Xr fmax 3 Ta maximum Ta 85*ae082addSchristos.It lm.fmin Ta Xr fmin 3 Ta minimum Ta 86*ae082addSchristos.It lm.fmod Ta Xr fmod 3 Ta remainder Ta 87*ae082addSchristos.It lm.hypot Ta Xr hypot 3 Ta Euclidean distance Ta 88*ae082addSchristos.It lm.ilogb Ta Xr ilogb 3 Ta exponent extraction Ta 89*ae082addSchristos.It lm.isinf Ta Xr isinf 3 Ta test for infinity Ta 90*ae082addSchristos.It lm.isnan Ta Xr isnan 3 Ta test for not-a-number Ta 91*ae082addSchristos.It lm.j0 Ta Xr j0 3 Ta Bessel function Ta 92*ae082addSchristos.It lm.j1 Ta Xr j0 3 Ta Bessel function Ta 93*ae082addSchristos.It lm.jn Ta Xr j0 3 Ta Bessel function Ta 94*ae082addSchristos.It lm.lgamma Ta Xr lgamma 3 Ta log gamma function Ta 95*ae082addSchristos.It lm.log Ta Xr log 3 Ta natural logarithm Ta 96*ae082addSchristos.It lm.log10 Ta Xr log 3 Ta logarithm to base 10 Ta 97*ae082addSchristos.It lm.log1p Ta Xr log 3 Ta log(1+x) Ta 98*ae082addSchristos.It lm.nan Ta Xr nan 3 Ta return quiet \*(Na Ta 99*ae082addSchristos.It lm.nextafter Ta Xr nextafter 3 Ta next representable number Ta 100*ae082addSchristos.It lm.pow Ta Xr pow 3 Ta exponential x**y Ta 101*ae082addSchristos.It lm.remainder Ta Xr remainder 3 Ta remainder Ta 102*ae082addSchristos.It lm.rint Ta Xr rint 3 Ta round to nearest integer Ta 103*ae082addSchristos.It lm.scalbn Ta Xr scalbn 3 Ta exponent adjustment Ta 104*ae082addSchristos.It lm.sin Ta Xr sin 3 Ta trigonometric function Ta 105*ae082addSchristos.It lm.sinh Ta Xr sinh 3 Ta hyperbolic function Ta 106*ae082addSchristos.It lm.sqrt Ta Xr sqrt 3 Ta square root Ta 107*ae082addSchristos.It lm.tan Ta Xr tan 3 Ta trigonometric function Ta 108*ae082addSchristos.It lm.tanh Ta Xr tanh 3 Ta hyperbolic function Ta 109*ae082addSchristos.It lm.trunc Ta Xr trunc 3 Ta nearest integral value Ta 110*ae082addSchristos.It lm.y0 Ta Xr j0 3 Ta Bessel function Ta 111*ae082addSchristos.It lm.y1 Ta Xr j0 3 Ta Bessel function Ta 112*ae082addSchristos.It lm.yn Ta Xr j0 3 Ta Bessel function Ta 113*ae082addSchristos.El 114*ae082addSchristos.Ss List of Defined Values 115*ae082addSchristos.Bl -column "M_2_SQRTPIXX" "1.12837916709551257390XX" "2/sqrt(pi)XXX" 116*ae082addSchristos.It Sy Name Ta Sy Value Ta Sy Description 117*ae082addSchristos.It lm.M_E 2.7182818284590452354 e 118*ae082addSchristos.It lm.M_LOG2E 1.4426950408889634074 log 2e 119*ae082addSchristos.It lm.M_LOG10E 0.43429448190325182765 log 10e 120*ae082addSchristos.It lm.M_LN2 0.69314718055994530942 log e2 121*ae082addSchristos.It lm.M_LN10 2.30258509299404568402 log e10 122*ae082addSchristos.It lm.M_PI 3.14159265358979323846 pi 123*ae082addSchristos.It lm.M_PI_2 1.57079632679489661923 pi/2 124*ae082addSchristos.It lm.M_PI_4 0.78539816339744830962 pi/4 125*ae082addSchristos.It lm.M_1_PI 0.31830988618379067154 1/pi 126*ae082addSchristos.It lm.M_2_PI 0.63661977236758134308 2/pi 127*ae082addSchristos.It lm.M_2_SQRTPI 1.12837916709551257390 2/sqrt(pi) 128*ae082addSchristos.It lm.M_SQRT2 1.41421356237309504880 sqrt(2) 129*ae082addSchristos.It lm.M_SQRT1_2 0.70710678118654752440 1/sqrt(2) 130*ae082addSchristos.El 131*ae082addSchristos.Sh NOTES 132*ae082addSchristosThe functions finite, isfinite, isinf, and isnan return integers in 133*ae082addSchristosthe math library, the results are converted to lua boolean values by 134*ae082addSchristosthis interface. 135*ae082addSchristos.Sh BUGS 136*ae082addSchristosThe single precision float, and long double data types, implemented in 137*ae082addSchristosseveral of the libm routines, are not supported by this interface. 138*ae082addSchristos.Pp 139*ae082addSchristosThe math library has a long development history, but if a bug exists 140*ae082addSchristosthere, it will certainly exist in this interface as well. 141*ae082addSchristos.Sh HISTORY 142*ae082addSchristosA 143*ae082addSchristos.Nm 144*ae082addSchristosLua binding appeared in 145*ae082addSchristos.Nx 9.4 . 146*ae082addSchristos.Sh AUTHORS 147*ae082addSchristos.An -nosplit 148*ae082addSchristosThe 149*ae082addSchristos.Nm 150*ae082addSchristosLua binding was written by 151*ae082addSchristos.An Phillip Rulon . 152