ACSUtils Wiki

An ACS library for ZDoom-based ports

User Tools

Site Tools


rounding

Rounding

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 aren't available in Zandronum 3.0 and silently return 0 there, 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. Otherwise, ACSUtils won't compile.

Rounding modes

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

A table that demonstrates the differences between rounding modes:

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

Rounding functions in ACSUtils

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)
rounding.txt · Last modified: 2019/04/20 20:12 by korshun