Little fix after the last commit (mostly a git fail)
[eigenmath-fx.git] / floor.cpp
blob960731c1fbf71479374746bb2554ee34b0d32ba9
1 #include "stdafx.h"
2 #include "defs.h"
4 void
5 eval_floor(void)
7 push(cadr(p1));
8 eval();
9 yfloor();
12 void
13 yfloor(void)
15 save();
16 yyfloor();
17 restore();
20 void
21 yyfloor(void)
23 double d;
25 p1 = pop();
27 if (!isnum(p1)) {
28 push_symbol(FLOOR);
29 push(p1);
30 list(2);
31 return;
34 if (isdouble(p1)) {
35 d = floor(p1->u.d);
36 push_double(d);
37 return;
40 if (isinteger(p1)) {
41 push(p1);
42 return;
45 p3 = alloc();
46 p3->k = NUM;
47 p3->u.q.a = mdiv(p1->u.q.a, p1->u.q.b);
48 p3->u.q.b = mint(1);
49 push(p3);
51 if (isnegativenumber(p1)) {
52 push_integer(-1);
53 add();
57 #if SELFTEST
59 static char *s[] = {
61 "floor(a)",
62 "floor(a)",
64 "floor(a+b)",
65 "floor(a+b)",
67 "floor(5/2)",
68 "2",
70 "floor(4/2)",
71 "2",
73 "floor(3/2)",
74 "1",
76 "floor(2/2)",
77 "1",
79 "floor(1/2)",
80 "0",
82 "floor(0/2)",
83 "0",
85 "floor(-1/2)",
86 "-1",
88 "floor(-2/2)",
89 "-1",
91 "floor(-3/2)",
92 "-2",
94 "floor(-4/2)",
95 "-2",
97 "floor(-5/2)",
98 "-3",
100 "floor(5/2.0)",
101 "2",
103 "floor(4/2.0)",
104 "2",
106 "floor(3/2.0)",
107 "1",
109 "floor(2/2.0)",
110 "1",
112 "floor(1/2.0)",
113 "0",
115 "floor(0.0)",
116 "0",
118 "floor(-1/2.0)",
119 "-1",
121 "floor(-2/2.0)",
122 "-1",
124 "floor(-3/2.0)",
125 "-2",
127 "floor(-4/2.0)",
128 "-2",
130 "floor(-5/2.0)",
131 "-3",
134 void
135 test_floor(void)
137 test(__FILE__, s, sizeof s / sizeof (char *));
140 #endif