1 #ifndef __INTEL_LLVM_COMPILER
3 #pragma float_control(precise, on)
5 #pragma STDC FENV_ACCESS ON
8 #include <../../nrnconf.h>
36 static int round_mode[] = {FE_DOWNWARD, FE_TONEAREST, FE_TOWARDZERO, FE_UPWARD};
38 int oldmode = std::fegetround();
39 if (oldmode == FE_TONEAREST) {
41 }
else if (oldmode == FE_TOWARDZERO) {
43 }
else if (oldmode == FE_UPWARD) {
45 }
else if (oldmode == FE_DOWNWARD) {
50 if (mode > 0 && mode < 5) {
60 arg = (int)
chkarg(1, 0, 4);
90 for (
int i = 1;
i < count; ++
i) {
100 for (
int i = 1;
i < count; ++
i) {
112 if (
eq(x, x1, epsilon) &&
eq(y, y1, epsilon)) {
115 if (
eq(x1, x2, epsilon) &&
eq(y1, y2, epsilon)) {
119 Coord dx, dy, dx2, dy2;
125 norm2 = dx2 * dx2 + dy2 * dy2;
126 norm = dx * dx + dy * dy;
127 dot = dx * dx2 + dy * dy2;
130 return d <= epsilon * epsilon;
136 Coord dx, dy, dx2, dy2;
142 norm2 = dx2 * dx2 + dy2 * dy2;
143 norm = dx * dx + dy * dy;
144 dot = dx * dx2 + dy * dy2;
157 Coord dx, dy, dx2, dy2;
162 norm2 = dx2 * dx2 + dy2 * dy2;
163 norm = dx * dx + dy * dy;
168 dot = dx * dx2 + dy * dy2;
174 return sqrt(dx * dx + dy * dy);
191 Coord l = x1, b = y1, r = x2,
t = y2;
196 return MyMath::inside(x, y, l - epsilon, b - epsilon, r + epsilon,
t + epsilon) &&
205 int i = int((y2 - y1) / d + .5);
211 }
else if (
i % 4 == 0) {
214 }
else if (
i % 5 == 0) {
227 int i = int(d / e + .5);
229 y1 = 5 * e *
ceil(x1 / e / 5 - .01);
230 y2 = 5 * e *
floor(x2 / e / 5 + .01);
232 y1 = e *
ceil(x1 / e - .01);
233 y2 = e *
floor(x2 / e + .01);
235 i = int((y2 - y1) / e + .5);
241 }
else if (
i % 4 == 0) {
244 }
else if (
i % 5 == 0) {
263 x1 = e *
floor(x1 / e);
264 x2 = e *
ceil(x2 / e);
267 x1 = e *
ceil(x1 / e);
268 x2 = e *
floor(x2 / e);
271 x1 = e *
floor(x1 / e);
272 x2 = e *
floor(x2 / e);
275 x1 = e *
ceil(x1 / e);
276 x2 = e *
ceil(x2 / e);
292 float d =
sqrt(x * x + y * y);
static bool near_line(Coord x, Coord y, Coord x1, Coord y1, Coord x2, Coord y2, float epsilon)
static void round_range_down(Coord x1, Coord x2, double &y1, double &y2, int &ntic)
static bool near_line_segment(Coord x, Coord y, Coord x1, Coord y1, Coord x2, Coord y2, float epsilon)
static float distance_to_line_segment(Coord x, Coord y, Coord x1, Coord y1, Coord x2, Coord y2)
static double anint(double)
static void minmax(Coord &min, Coord &max)
static bool unit_normal(Coord x, Coord y, Coord *perp)
static bool eq(T x, T y, T e)
static void round_range(Coord x1, Coord x2, double &y1, double &y2, int &ntic)
static float max(int count, const float *)
static bool inside(Coord x, Coord min, Coord max)
static void box(Requisition &, Coord &x1, Coord &y1, Coord &x2, Coord &y2)
static float min(int count, const float *)
static double round(float &x1, float &x2, int direction, int digits)
static float norm2(Coord x, Coord y)
static float distance_to_line(Coord x, Coord y, Coord x1, Coord y1, Coord x2, Coord y2)
const Requirement & x_requirement() const
const Requirement & y_requirement() const
void class2oc(const char *, ctor_f *cons, dtor_f *destruct, Member_func *, Member_ret_obj_func *, Member_ret_str_func *)
HocReturnType hoc_return_type_code
double chkarg(int, double low, double high)
static double inside(void *)
static Member_func members[]
static void * cons(Object *)
static void destruct(void *)
static double distance_to_line_segment(void *)
static double distance_to_line(void *)
static double feround(void *)
double norm(const Point3D &p1)
double dot(const Point3D &p1, const Point3D &p2)
#define nrn_assert(x)
assert()-like macro, independent of NDEBUG status