Pyrogenesis  13997
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Classes | Namespaces | Macros | Typedefs | Functions
Fixed.h File Reference
#include "lib/types.h"
#include "maths/Sqrt.h"

Go to the source code of this file.

Classes

class  CFixed< T, max_t, total_bits, int_bits, fract_bits_, fract_pow2 >
 A simple fixed-point number class. More...
 
struct  std::numeric_limits< CFixed< T, max_t, total_bits, int_bits, fract_bits_, fract_pow2 > >
 std::numeric_limits specialisation, currently just providing min and max More...
 

Namespaces

 std
 

Macros

#define USE_FIXED_OVERFLOW_CHECKS
 
#define FIXED_MUL_I64_I32_I32(a, b)   ((i64)(a) * (i64)(b))
 
#define CheckSignedSubtractionOverflow(type, left, right, overflowWarning, underflowWarning)
 
#define CheckSignedAdditionOverflow(type, left, right, overflowWarning, underflowWarning)
 
#define CheckCastOverflow(var, targetType, overflowWarning, underflowWarning)
 
#define CheckU32CastOverflow(var, targetType, overflowWarning)
 
#define CheckUnsignedAdditionOverflow(result, operand, overflowWarning)
 
#define CheckUnsignedSubtractionOverflow(result, left, overflowWarning)
 
#define CheckNegationOverflow(var, type, overflowWarning)
 
#define CheckMultiplicationOverflow(type, left, right, overflowWarning, underflowWarning)
 
#define CheckDivisionOverflow(type, left, right, overflowWarning)   if(right == -1) { CheckNegationOverflow(left, type, overflowWarning) }
 

Typedefs

typedef CFixed< i32,(i32) 0x7fffffff, 32, 15, 16, 65536 > CFixed_15_16
 A fixed-point number class with 1-bit sign, 15-bit integral part, 16-bit fractional part. More...
 
typedef CFixed_15_16 fixed
 Default fixed-point type used by the engine. More...
 

Functions

template<typename T >
T round_away_from_zero (float value)
 
template<typename T >
T round_away_from_zero (double value)
 
CFixed_15_16 atan2_approx (CFixed_15_16 y, CFixed_15_16 x)
 Inaccurate approximation of atan2 over fixed-point numbers. More...
 
void sincos_approx (CFixed_15_16 a, CFixed_15_16 &sin_out, CFixed_15_16 &cos_out)
 Compute sin(a) and cos(a). More...
 

Macro Definition Documentation

#define CheckCastOverflow (   var,
  targetType,
  overflowWarning,
  underflowWarning 
)
Value:
if(var > std::numeric_limits<targetType>::max()) \
debug_warn(overflowWarning); \
else if(var < std::numeric_limits<targetType>::min()) \
debug_warn(underflowWarning);
#define debug_warn(expr)
display the error dialog with the given text.
Definition: debug.h:324

Definition at line 66 of file Fixed.h.

#define CheckDivisionOverflow (   type,
  left,
  right,
  overflowWarning 
)    if(right == -1) { CheckNegationOverflow(left, type, overflowWarning) }

Definition at line 92 of file Fixed.h.

#define CheckMultiplicationOverflow (   type,
  left,
  right,
  overflowWarning,
  underflowWarning 
)
Value:
i64 res##left = (i64)left * (i64)right; \
CheckCastOverflow(res##left, type, overflowWarning, underflowWarning)
#define i64
Definition: types.h:37
#define CheckCastOverflow(var, targetType, overflowWarning, underflowWarning)
Definition: Fixed.h:66

Definition at line 88 of file Fixed.h.

#define CheckNegationOverflow (   var,
  type,
  overflowWarning 
)
Value:
if(value == std::numeric_limits<type>::min()) \
debug_warn(overflowWarning);
#define debug_warn(expr)
display the error dialog with the given text.
Definition: debug.h:324

Definition at line 84 of file Fixed.h.

#define CheckSignedAdditionOverflow (   type,
  left,
  right,
  overflowWarning,
  underflowWarning 
)
Value:
if(left > 0 && right > 0 && std::numeric_limits<type>::max() - left < right) \
debug_warn(overflowWarning); \
else if(left < 0 && right < 0 && std::numeric_limits<type>::min() - left > right) \
debug_warn(underflowWarning);
#define debug_warn(expr)
display the error dialog with the given text.
Definition: debug.h:324

Definition at line 60 of file Fixed.h.

#define CheckSignedSubtractionOverflow (   type,
  left,
  right,
  overflowWarning,
  underflowWarning 
)
Value:
if(left > 0 && right < 0 && left > std::numeric_limits<type>::max() + right) \
debug_warn(overflowWarning); \
else if(left < 0 && right > 0 && left < std::numeric_limits<type>::min() + right) \
debug_warn(underflowWarning);
#define debug_warn(expr)
display the error dialog with the given text.
Definition: debug.h:324

Definition at line 54 of file Fixed.h.

#define CheckU32CastOverflow (   var,
  targetType,
  overflowWarning 
)
Value:
if(var > (u32)std::numeric_limits<targetType>::max()) \
debug_warn(overflowWarning);
#define u32
Definition: types.h:41
#define debug_warn(expr)
display the error dialog with the given text.
Definition: debug.h:324

Definition at line 72 of file Fixed.h.

#define CheckUnsignedAdditionOverflow (   result,
  operand,
  overflowWarning 
)
Value:
if(result < operand) \
debug_warn(overflowWarning);
#define debug_warn(expr)
display the error dialog with the given text.
Definition: debug.h:324

Definition at line 76 of file Fixed.h.

#define CheckUnsignedSubtractionOverflow (   result,
  left,
  overflowWarning 
)
Value:
if(result > left) \
debug_warn(overflowWarning);
#define debug_warn(expr)
display the error dialog with the given text.
Definition: debug.h:324

Definition at line 80 of file Fixed.h.

#define FIXED_MUL_I64_I32_I32 (   a,
 
)    ((i64)(a) * (i64)(b))

Definition at line 36 of file Fixed.h.

#define USE_FIXED_OVERFLOW_CHECKS

Definition at line 28 of file Fixed.h.

Typedef Documentation

typedef CFixed<i32, (i32)0x7fffffff, 32, 15, 16, 65536> CFixed_15_16

A fixed-point number class with 1-bit sign, 15-bit integral part, 16-bit fractional part.

Definition at line 334 of file Fixed.h.

Default fixed-point type used by the engine.

Definition at line 339 of file Fixed.h.

Function Documentation

CFixed_15_16 atan2_approx ( CFixed_15_16  y,
CFixed_15_16  x 
)

Inaccurate approximation of atan2 over fixed-point numbers.

Maximum error is almost 0.08 radians (4.5 degrees).

Definition at line 147 of file Fixed.cpp.

template<typename T >
T round_away_from_zero ( float  value)
inline

Definition at line 98 of file Fixed.h.

template<typename T >
T round_away_from_zero ( double  value)
inline

Definition at line 104 of file Fixed.h.

void sincos_approx ( CFixed_15_16  a,
CFixed_15_16 sin_out,
CFixed_15_16 cos_out 
)

Compute sin(a) and cos(a).

Maximum error for -2pi < a < 2pi is almost 0.0005.

Definition at line 187 of file Fixed.cpp.