# Lua 5.3 Integer

9 messages
Open this post in threaded view
|

## Lua 5.3 Integer

 Is there any way to enforce integer arithmetic in Lua 5.3 e.g. x = 5 / 2 -- => 2 where x is an integer?
Open this post in threaded view
|

## Re: Lua 5.3 Integer

 On 09/10/2019 04.41, D Burgess wrote: > Is there any way to enforce integer arithmetic in Lua 5.3 > > e.g. > > x = 5 / 2 -- => 2 > where x is an integer? Do you mean 5//2? Or in general? -- nobody
Open this post in threaded view
|

## Re: Lua 5.3 Integer

 In general.
Open this post in threaded view
|

## Re: Lua 5.3 Integer

 In reply to this post by D Burgess-3 > Is there any way to enforce integer arithmetic in Lua 5.3 > > e.g. > > x = 5 / 2 -- => 2 > where x is an integer? 1) Do not use '/' or '^'. 2) For any value that enters the computation that you cannot be sure it is an integer, apply a conversion to it. How to convert depends on you: - x | 0   -- fast, raises an error if x is not an integer value - math.tointeger(x)      -- returns falsy if x is not an integer value - math.floor, math.ceil, math.modf      -- rounds x (but the result may not be in the proper range) -- Roberto
Open this post in threaded view
|

## Re: Lua 5.3 Integer

 On Wed, Oct 9, 2019 at 6:02 AM Roberto Ierusalimschy <[hidden email]> wrote:> Is there any way to enforce integer arithmetic in Lua 5.3 > > e.g. > > x = 5 / 2 -- => 2 > where x is an integer? 1) Do not use '/' or '^'. 2) For any value that enters the computation that you cannot be sure it is an integer, apply a conversion to it. How to convert depends on you: - x | 0   -- fast, raises an error if x is not an integer value - math.tointeger(x)      -- returns falsy if x is not an integer value - math.floor, math.ceil, math.modf      -- rounds x (but the result may not be in the proper range) -- Roberto For my edification:  The answer is then "No, there is no way 'in general' to perform integer math"? It seems to me that all the suggestions above are value conversions/coercion and have nothing to do with actually performing the integer math equation requested by the OP?
Open this post in threaded view
|

## Re: Lua 5.3 Integer

 For all the arithmetic operators(+/*-), if your inputs are integers, then your output must be an integer (unless you go outside the representable range).  The exception is division, so integer division handles that case.  So if you convert all your inputs to integers and use integer division instead of float division, you'll never have a non-integer.On Wed, Oct 9, 2019, 11:44 AM Russell Haley <[hidden email]> wrote:On Wed, Oct 9, 2019 at 6:02 AM Roberto Ierusalimschy <[hidden email]> wrote:> Is there any way to enforce integer arithmetic in Lua 5.3 > > e.g. > > x = 5 / 2 -- => 2 > where x is an integer? 1) Do not use '/' or '^'. 2) For any value that enters the computation that you cannot be sure it is an integer, apply a conversion to it. How to convert depends on you: - x | 0   -- fast, raises an error if x is not an integer value - math.tointeger(x)      -- returns falsy if x is not an integer value - math.floor, math.ceil, math.modf      -- rounds x (but the result may not be in the proper range) -- Roberto For my edification:  The answer is then "No, there is no way 'in general' to perform integer math"? It seems to me that all the suggestions above are value conversions/coercion and have nothing to do with actually performing the integer math equation requested by the OP?
Open this post in threaded view
|

## Re: Lua 5.3 Integer

 On Wed, 2019-10-09 at 11:48 -0400, Katie Volz wrote: > For all the arithmetic operators(+/*-), if your inputs are integers, > then your output must be an integer (unless you go outside the > representable range).  The exception is division, so integer division > handles that case.  So if you convert all your inputs to integers and > use integer division instead of float division, you'll never have a > non-integer. > > On Wed, Oct 9, 2019, 11:44 AM Russell Haley <[hidden email]> > wrote: > > > > On Wed, Oct 9, 2019 at 6:02 AM Roberto Ierusalimschy < > > [hidden email]> wrote: > > > > Is there any way to enforce integer arithmetic in Lua 5.3 > > > > > > > > e.g. > > > > > > > > x = 5 / 2 -- => 2 > > > > where x is an integer? > > > > > > 1) Do not use '/' or '^'. > > > > > > 2) For any value that enters the computation that you cannot be > > > sure > > > it is an integer, apply a conversion to it. How to convert > > > depends > > > on you: > > > > > > - x | 0   -- fast, raises an error if x is not an integer value > > > > > > - math.tointeger(x)      -- returns falsy if x is not an integer > > > value > > > > > > - math.floor, math.ceil, math.modf > > >      -- rounds x (but the result may not be in the proper range) > > > > > > > > > -- Roberto > > > > > > > For my edification:  The answer is then "No, there is no way 'in > > general' to perform integer math"? It seems to me that all the > > suggestions above are value conversions/coercion and have nothing > > to do with actually performing the integer math equation requested > > by the OP? > > If you go outside of integer range, result is still an integer, just not one you may expect.