SNES Fixed-Point Math. More...
#include <snes/types.h>Go to the source code of this file.
Macros | |
| #define | FIX(x) ((fixed)((x) << 8)) |
| Convert integer to fixed-point. | |
| #define | FIX_FRAC(x) ((u8)((x) & 0xFF)) |
| Get fractional part of fixed-point. | |
| #define | FIX_MAKE(i, f) ((fixed)(((i) << 8) | (f))) |
| Create fixed-point from integer and fraction. | |
| #define | UNFIX(x) ((s16)((x) >> 8)) |
| Convert fixed-point to integer (truncate) | |
| #define | UNFIX_ROUND(x) ((s16)(((x) + 128) >> 8)) |
| Convert fixed-point to integer (rounded) | |
Typedefs | |
| typedef s16 | fixed |
| 8.8 signed fixed-point type | |
Functions | |
| u16 | div16 (u16 dividend, u16 divisor) |
| Safe 16-bit division. | |
| fixed | fixAbs (fixed x) |
| Absolute value of fixed-point. | |
| fixed | fixClamp (fixed x, fixed min, fixed max) |
| Clamp value to range. | |
| fixed | fixCos (u8 angle) |
| Get cosine value for angle. | |
| fixed | fixDiv (fixed a, fixed b) |
| Divide two fixed-point values. | |
| fixed | fixLerp (fixed a, fixed b, u8 t) |
| Linear interpolation. | |
| fixed | fixMul (fixed a, fixed b) |
| Multiply two fixed-point values. | |
| fixed | fixSin (u8 angle) |
| Get sine value for angle. | |
| u16 | mod16 (u16 dividend, u16 divisor) |
| Get remainder of division. | |
| u16 | mul16 (u16 a, u16 b) |
| Safe 16-bit multiplication. | |
SNES Fixed-Point Math.
Fixed-point arithmetic for smooth movement and physics.
This module provides:
The fixed type is 16-bit signed (s16) in 8.8 format:
Angles are 8-bit values (0-255) representing 0-360 degrees:
| #define FIX | ( | x | ) | ((fixed)((x) << 8)) |
| #define FIX_FRAC | ( | x | ) | ((u8)((x) & 0xFF)) |
Get fractional part of fixed-point.
| x | Fixed-point value |
| #define UNFIX | ( | x | ) | ((s16)((x) >> 8)) |
| #define UNFIX_ROUND | ( | x | ) | ((s16)(((x) + 128) >> 8)) |
Convert fixed-point to integer (rounded)
| x | Fixed-point value |
8.8 signed fixed-point type
Range: -128.0 to 127.996 (approximately) Precision: 1/256 = 0.00390625
Safe 16-bit division.
| dividend | Number to divide |
| divisor | Number to divide by (must not be zero) |
Absolute value of fixed-point.
| x | Fixed-point value |
Clamp value to range.
| x | Value to clamp |
| min | Minimum value |
| max | Maximum value |
Divide two fixed-point values.
| a | Dividend (fixed-point) |
| b | Divisor (fixed-point, must not be zero) |
Get remainder of division.
| dividend | Number to divide |
| divisor | Number to divide by (must not be zero) |
Safe 16-bit multiplication.
Multiplies two 16-bit values safely. Use this instead of the compiler's * operator for important calculations, as the compiler's runtime multiplication can have bugs.
| a | First operand |
| b | Second operand |