Rounding functions

ACSUtils provides a full set of functions to round fixed-point numbers to integers.

Current GZDoom provides built-in functions floor, ceil and round, but these functions are not available in Zandronum 3.0 and silently return 0, because all unimplemented built-in ACS functions return 0.Before using ACSUtils, rename either the built-in functions (by editing zspecial.acs) or the ACSUtils functions (by editing acsutils.acs) to something else.

There are four rounding modes:

trunc – zeroes the fractional part of the number

floor – rounds the number down

ceil – round the number up

round – rounds the number to the closest integer

Example rounding table:

x	round(x)	floor(x)	ceil(x)	trunc(x)
1.3	1	1	2	1
1.5	2	1	2	1
1.8	2	1	2	1
-1.3	-1	-2	-1	-1
-1.5	-1	-2	-1	-1
-1.8	-2	-2	-1	-1

Every rounding mode is available as two functions:

Functions without the i prefix return a fixed, e.g. floor(2.3) == 2.0.

Functions with the i prefix return an int, e.g ifloor(2.3) == 2.

Mode	fixed result	int result
floor	fixed floor(fixed x)	int ifloor(fixed x)
ceil	fixed ceil(fixed x)	int iceil(fixed x)
round	fixed round(fixed x)	int iround(fixed x)
trunc	fixed trunc(fixed x)	int itrunc(fixed x)