2#ifndef STORMM_FIXED_PRECISION_H
3#define STORMM_FIXED_PRECISION_H
8#include "Constants/behavior.h"
9#include "Constants/scaling.h"
10#include "DataTypes/common_types.h"
15using constants::ExceptionResponse;
16using constants::int_bit_count_int;
17using constants::llint_bit_count_int;
18using constants::PrecisionModel;
30constexpr double default_globalpos_scale_lf = 4294967296.0;
31constexpr float default_globalpos_scale_f = (float)default_globalpos_scale_lf;
32constexpr int default_globalpos_scale_bits = 32;
33constexpr double default_inverse_globalpos_scale_lf = 1.0 / default_globalpos_scale_lf;
34constexpr float default_inverse_globalpos_scale_f = (float)1.0 / default_globalpos_scale_f;
35constexpr int min_globalpos_scale_bits = 24;
36constexpr int max_globalpos_scale_bits = 72;
37constexpr int globalpos_scale_nonoverflow_bits = 38;
38constexpr double default_localpos_scale_lf = 16777216.0;
39constexpr float default_localpos_scale_f = (float)default_localpos_scale_lf;
40constexpr int default_localpos_scale_bits = 24;
41constexpr double default_inverse_localpos_scale_lf = 1.0 / default_localpos_scale_lf;
42constexpr float default_inverse_localpos_scale_f = (float)1.0 / default_localpos_scale_f;
43constexpr int min_localpos_scale_bits = 20;
44constexpr int max_localpos_scale_bits = 26;
45constexpr double default_trajpos_scale_lf = 16384.0;
46constexpr float default_trajpos_scale_f = (float)default_trajpos_scale_lf;
47constexpr int default_trajpos_scale_bits = 14;
48constexpr double default_inverse_trajpos_scale_lf = 1.0 / default_trajpos_scale_lf;
49constexpr float default_inverse_trajpos_scale_f = (float)1.0 / default_trajpos_scale_f;
50constexpr int min_trajpos_scale_bits = 10;
51constexpr int max_trajpos_scale_bits = 48;
59constexpr double default_velocity_scale_lf = 4398046511104.0;
60constexpr float default_velocity_scale_f = (float)default_velocity_scale_lf;
61constexpr int default_velocity_scale_bits = 42;
62constexpr double default_inverse_velocity_scale_lf = 1.0 / default_velocity_scale_lf;
63constexpr float default_inverse_velocity_scale_f = (float)1.0 / default_velocity_scale_f;
64constexpr int min_velocity_scale_bits = 36;
65constexpr int max_velocity_scale_bits = 80;
66constexpr int velocity_scale_nonoverflow_bits = 54;
78constexpr double default_force_scale_lf = 8388608.0;
79constexpr float default_force_scale_f = (float)default_force_scale_lf;
80constexpr int default_force_scale_bits = 23;
81constexpr double default_inverse_force_scale_lf = 1.0 / default_force_scale_lf;
82constexpr float default_inverse_force_scale_f = (float)default_inverse_force_scale_lf;
83constexpr int min_force_scale_bits = 18;
84constexpr int max_force_scale_bits = 72;
85constexpr int force_scale_nonoverflow_bits = 40;
98constexpr double default_momentum_scale_lf = 68719476736.0;
99constexpr float default_momentum_scale_f = (float)default_momentum_scale_lf;
100constexpr int default_momentum_scale_bits = 36;
101constexpr int min_momentum_scale_bits = 24;
102constexpr int max_momentum_scale_bits = 48;
103constexpr double default_com_scale_lf = 68719476736.0;
104constexpr float default_com_scale_f = (float)default_com_scale_lf;
105constexpr int default_com_scale_bits = 36;
106constexpr int min_com_scale_bits = 20;
107constexpr int max_com_scale_bits = 52;
108constexpr double default_inertia_scale_lf = 268435456.0;
109constexpr float default_inertia_scale_f = (float)default_inertia_scale_lf;
110constexpr int default_inertia_scale_bits = 28;
111constexpr int min_inertia_scale_bits = 20;
112constexpr int max_inertia_scale_bits = 36;
119constexpr double default_energy_scale_lf = 67108864.0;
120constexpr float default_energy_scale_f = (float)default_energy_scale_lf;
121constexpr int default_energy_scale_bits = 26;
122constexpr double default_inverse_energy_scale_lf = 1.0 / default_energy_scale_lf;
123constexpr float default_inverse_energy_scale_f = (float)default_inverse_energy_scale_lf;
124constexpr int min_energy_scale_bits = 22;
125constexpr int max_energy_scale_bits = 40;
131constexpr double default_charge_mesh_scale_lf = 268435456.0;
132constexpr float default_charge_mesh_scale_f = (float)default_charge_mesh_scale_lf;
133constexpr int default_charge_mesh_scale_bits = 28;
134constexpr double default_inverse_charge_mesh_scale_lf = 1.0 / default_charge_mesh_scale_lf;
135constexpr float default_inverse_charge_mesh_scale_f = (float)default_inverse_charge_mesh_scale_lf;
136constexpr int min_charge_mesh_scale_bits = 24;
137constexpr int max_charge_mesh_scale_bits = 48;