.\" .\" Copyright (c) 2022 The NetBSD Foundation, Inc. .\" All rights reserved. .\" .\" This code is derived from software contributed to The NetBSD Foundation .\" by Phillip Rulon .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" .\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS .\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED .\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR .\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS .\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS .\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN .\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" .Dd November 2, 2022 .Dt LIBM 3lua .Os .Sh NAME .Nm libm .Nd Lua interface to the .Xr math 3 library .Sh SYNOPSIS .Cd "local lm = require 'libm'" .Sh DESCRIPTION The .Nm Lua binding provides access to the .Xr math 3 library. If these functions are given an argument outside the domain of the function the return value will be NaN. This can be checked with lm.isnan(). .Pp Many of these functions have native equivalents in the Lua math library. Others, like .Xr round 3 , .Xr cbrt 3 , and the hyperbolic trigonometry functions, are not provided without an auxiliary module. The functions that are redundant are provided for completeness. .Pp Since these functions map quite closely to the functions in the math library, detailed information about their behavior can be found in the man pages for each function in section 3 of the manual. .Ss List of Functions .Bl -column "copysignX" "gammaX3XX" "inverse trigonometric funcX" .It Sy Name Ta Sy Man page Ta Sy Description Ta .It lm.acos Ta Xr acos 3 Ta inverse trigonometric function Ta .It lm.acosh Ta Xr acosh 3 Ta inverse hyperbolic function Ta .It lm.asin Ta Xr asin 3 Ta inverse trigonometric function Ta .It lm.asinh Ta Xr asinh 3 Ta inverse hyperbolic function Ta .It lm.atan Ta Xr atan 3 Ta inverse trigonometric function Ta .It lm.atanh Ta Xr atanh 3 Ta inverse hyperbolic function Ta .It lm.atan2 Ta Xr atan2 3 Ta inverse trigonometric function Ta .It lm.cbrt Ta Xr sqrt 3 Ta cube root Ta .It lm.ceil Ta Xr ceil 3 Ta integer no less than Ta .It lm.copysign Ta Xr copysign 3 Ta copy sign bit Ta .It lm.cos Ta Xr cos 3 Ta trigonometric function Ta .It lm.cosh Ta Xr cosh 3 Ta hyperbolic function Ta .It lm.erf Ta Xr erf 3 Ta error function Ta .It lm.erfc Ta Xr erf 3 Ta complementary error function Ta .It lm.exp Ta Xr exp 3 Ta base e exponential Ta .It lm.exp2 Ta Xr exp2 3 Ta base 2 exponential Ta .It lm.expm1 Ta Xr expm1 3 Ta exp(x)\-1 Ta .It lm.fabs Ta Xr fabs 3 Ta absolute value Ta .It lm.fdim Ta Xr erf 3 Ta positive difference Ta .It lm.finite Ta Xr finite 3 Ta test for finity Ta .It lm.floor Ta Xr floor 3 Ta integer no greater than Ta .It lm.fma Ta Xr fmod 3 Ta fused multiply-add Ta .It lm.fmax Ta Xr fmax 3 Ta maximum Ta .It lm.fmin Ta Xr fmin 3 Ta minimum Ta .It lm.fmod Ta Xr fmod 3 Ta remainder Ta .It lm.hypot Ta Xr hypot 3 Ta Euclidean distance Ta .It lm.ilogb Ta Xr ilogb 3 Ta exponent extraction Ta .It lm.isinf Ta Xr isinf 3 Ta test for infinity Ta .It lm.isnan Ta Xr isnan 3 Ta test for not-a-number Ta .It lm.j0 Ta Xr j0 3 Ta Bessel function Ta .It lm.j1 Ta Xr j0 3 Ta Bessel function Ta .It lm.jn Ta Xr j0 3 Ta Bessel function Ta .It lm.lgamma Ta Xr lgamma 3 Ta log gamma function Ta .It lm.log Ta Xr log 3 Ta natural logarithm Ta .It lm.log10 Ta Xr log 3 Ta logarithm to base 10 Ta .It lm.log1p Ta Xr log 3 Ta log(1+x) Ta .It lm.nan Ta Xr nan 3 Ta return quiet \*(Na Ta .It lm.nextafter Ta Xr nextafter 3 Ta next representable number Ta .It lm.pow Ta Xr pow 3 Ta exponential x**y Ta .It lm.remainder Ta Xr remainder 3 Ta remainder Ta .It lm.rint Ta Xr rint 3 Ta round to nearest integer Ta .It lm.scalbn Ta Xr scalbn 3 Ta exponent adjustment Ta .It lm.sin Ta Xr sin 3 Ta trigonometric function Ta .It lm.sinh Ta Xr sinh 3 Ta hyperbolic function Ta .It lm.sqrt Ta Xr sqrt 3 Ta square root Ta .It lm.tan Ta Xr tan 3 Ta trigonometric function Ta .It lm.tanh Ta Xr tanh 3 Ta hyperbolic function Ta .It lm.trunc Ta Xr trunc 3 Ta nearest integral value Ta .It lm.y0 Ta Xr j0 3 Ta Bessel function Ta .It lm.y1 Ta Xr j0 3 Ta Bessel function Ta .It lm.yn Ta Xr j0 3 Ta Bessel function Ta .El .Ss List of Defined Values .Bl -column "M_2_SQRTPIXX" "1.12837916709551257390XX" "2/sqrt(pi)XXX" .It Sy Name Ta Sy Value Ta Sy Description .It lm.M_E 2.7182818284590452354 e .It lm.M_LOG2E 1.4426950408889634074 log 2e .It lm.M_LOG10E 0.43429448190325182765 log 10e .It lm.M_LN2 0.69314718055994530942 log e2 .It lm.M_LN10 2.30258509299404568402 log e10 .It lm.M_PI 3.14159265358979323846 pi .It lm.M_PI_2 1.57079632679489661923 pi/2 .It lm.M_PI_4 0.78539816339744830962 pi/4 .It lm.M_1_PI 0.31830988618379067154 1/pi .It lm.M_2_PI 0.63661977236758134308 2/pi .It lm.M_2_SQRTPI 1.12837916709551257390 2/sqrt(pi) .It lm.M_SQRT2 1.41421356237309504880 sqrt(2) .It lm.M_SQRT1_2 0.70710678118654752440 1/sqrt(2) .El .Sh NOTES The functions finite, isfinite, isinf, and isnan return integers in the math library, the results are converted to lua boolean values by this interface. .Sh BUGS The single precision float, and long double data types, implemented in several of the libm routines, are not supported by this interface. .Pp The math library has a long development history, but if a bug exists there, it will certainly exist in this interface as well. .Sh HISTORY A .Nm Lua binding appeared in .Nx 9.4 . .Sh AUTHORS .An -nosplit The .Nm Lua binding was written by .An Phillip Rulon .