1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#pragma once
#include "libfixmath/libfixmath/fixmath.h"
namespace Phy2D
{
#define NUMBER_FLOAT false
#if NUMBER_FLOAT
typedef float number;
#define NUMBER_MAX (FLT_MAX)
#define NUMBER_MIN (FLT_MIN)
#define SQRT(a) (sqrt((a)))
#define SIN(a) (sin((a)))
#define COS(a) (cos((a)))
#else
// 同时一定要开启内联函数扩展,否则执行效率会非常低
typedef Fix16 number;
#define NUMBER_MAX (fix16_maximum)
#define NUMBER_MIN (fix16_minimum)
#define SQRT(a) ((a).sqrt())
#define SIN(a) ((a).sin())
#define COS(a) ((a).cos())
#endif
#if false
typedef fix16_t number;
#define A (a)
#define B (b)
#define Number(float_value) (fix16_from_float((float_value)))
#define to_float(n) (fix16_to_float((n)))
inline bool eq(number a, number b) { return (A == B) ;}
inline bool lt(number a, number b) { return (A < B) ;}
inline bool le(number a, number b) { return (A <= B) ;}
inline bool gt(number a, number b) { return (A > B) ;}
inline bool ge(number a, number b) { return (A >= B) ;}
inline number add(number a, number b) { return (fix16_add(A, B)) ;}
inline number sub(number a, number b) { return (fix16_sub(A, B)) ;}
inline number mul(number a, number b) { return (fix16_mul(A, B)) ;}
inline number div(number a, number b) { return (fix16_div(A, B)) ;}
inline number mod(number a, number b) { return (fix16_mod(A, B)) ;}
inline number sin(number a) { return (fix16_sin(A)) ;}
inline number cos(number a) { return (fix16_cos(A)) ;}
inline number tan(number a) { return (fix16_tan(A)) ;}
inline number acos(number a) { return (fix16_acos(A)) ;}
inline number asin(number a) { return (fix16_asin(A)) ;}
inline number atan(number a) { return (fix16_atan(A)) ;}
inline number neg(number a) { return (fix16_sub(0, A)) ;}
inline number abs(number a) { return (fix16_abs(A)) ;}
inline number sqrt(number a) { return fix16_sqrt(a); }
#endif
}
|