@@ -54,9 +54,10 @@ UNARY(
5454 Int, Unit)
5555
5656UNARY (
57- print_float, float ,
57+ print_float, double ,
5858 {
59- std::cout << val;
59+ std::streamsize ss = std::cout.precision ();
60+ std::cout << std::setprecision (15 ) << val << std::setprecision (ss);
6061 return TermNode::Unit ();
6162 },
6263 Float, Unit)
@@ -123,14 +124,14 @@ UNARY(
123124 floatKeyboardInit ();
124125 setupKeyboard (" read_float" , " " );
125126 swkbdInputText (&swkbd, buf, READ_MAX );
126- float x = std::stof (buf);
127+ double x = std::stod (buf);
127128 std::cout << x << std::endl;
128129 normalKeyboardInit ();
129130 return TermNode::Float (x);
130131#else
131132 std::string in;
132133 std::getline (std::cin, in);
133- return TermNode::Float (std::stof (in));
134+ return TermNode::Float (std::stod (in));
134135#endif
135136 },
136137 Unit, Float)
@@ -185,84 +186,90 @@ BINARY(asr, int, int, { return TermNode::Int(val1 >> val2); }, Int, Int, Int)
185186
186187// ------------------ Float functions ------------------
187188
188- UNARY (fneg, float , { return TermNode::Float (-val); }, Float, Float)
189+ UNARY (fneg, double , { return TermNode::Float (-val); }, Float, Float)
189190
190- UNARY (fpos, float , { return TermNode::Float (+val); }, Float, Float)
191+ UNARY (fpos, double , { return TermNode::Float (+val); }, Float, Float)
191192
192193BINARY (
193- _fadd, float , float , { return TermNode::Float (val1 + val2); }, Float , Float,
194- Float)
194+ _fadd, double , double , { return TermNode::Float (val1 + val2); }, Float,
195+ Float, Float )
195196
196197BINARY (
197- _fsub, float , float , { return TermNode::Float (val1 - val2); }, Float , Float,
198- Float)
198+ _fsub, double , double , { return TermNode::Float (val1 - val2); }, Float,
199+ Float, Float )
199200
200201BINARY (
201- _fmul, float , float , { return TermNode::Float (val1 * val2); }, Float , Float,
202- Float)
202+ _fmul, double , double , { return TermNode::Float (val1 * val2); }, Float,
203+ Float, Float )
203204
204205BINARY (
205- _fdiv, float , float , { return TermNode::Float (val1 / val2); }, Float , Float,
206- Float)
206+ _fdiv, double , double , { return TermNode::Float (val1 / val2); }, Float,
207+ Float, Float )
207208
208209BINARY (
209- fpow, float , float , { return TermNode::Float (std::pow (val1, val2)); },
210+ fpow, double , double , { return TermNode::Float (std::pow (val1, val2)); },
210211 Float, Float, Float)
211212
212- UNARY (_fsqrt, float , { return TermNode::Float (std::sqrt (val)); }, Float, Float)
213+ UNARY (_fsqrt, double , { return TermNode::Float (std::sqrt (val)); }, Float, Float)
213214
214- UNARY (_fexp, float , { return TermNode::Float (std::exp (val)); }, Float, Float)
215+ UNARY (_fexp, double , { return TermNode::Float (std::exp (val)); }, Float, Float)
215216
216- UNARY (flog, float , { return TermNode::Float (std::log (val)); }, Float, Float)
217+ UNARY (flog, double , { return TermNode::Float (std::log (val)); }, Float, Float)
217218
218- UNARY (flog10, float , { return TermNode::Float (std::log10 (val)); }, Float, Float)
219+ UNARY (
220+ flog10, double , { return TermNode::Float (std::log10 (val)); }, Float, Float)
219221
220- UNARY (fexpm1, float , { return TermNode::Float (std::expm1 (val)); }, Float, Float)
222+ UNARY (
223+ fexpm1, double , { return TermNode::Float (std::expm1 (val)); }, Float, Float)
221224
222- UNARY (flog1p, float , { return TermNode::Float (std::log1p (val)); }, Float, Float)
225+ UNARY (
226+ flog1p, double , { return TermNode::Float (std::log1p (val)); }, Float, Float)
223227
224- UNARY (fcos, float , { return TermNode::Float (std::cos (val)); }, Float, Float)
228+ UNARY (fcos, double , { return TermNode::Float (std::cos (val)); }, Float, Float)
225229
226- UNARY (fsin, float , { return TermNode::Float (std::sin (val)); }, Float, Float)
230+ UNARY (fsin, double , { return TermNode::Float (std::sin (val)); }, Float, Float)
227231
228- UNARY (ftan, float , { return TermNode::Float (std::tan (val)); }, Float, Float)
232+ UNARY (ftan, double , { return TermNode::Float (std::tan (val)); }, Float, Float)
229233
230- UNARY (facos, float , { return TermNode::Float (std::acos (val)); }, Float, Float)
234+ UNARY (facos, double , { return TermNode::Float (std::acos (val)); }, Float, Float)
231235
232- UNARY (fasin, float , { return TermNode::Float (std::asin (val)); }, Float, Float)
236+ UNARY (fasin, double , { return TermNode::Float (std::asin (val)); }, Float, Float)
233237
234- UNARY (fatan, float , { return TermNode::Float (std::atan (val)); }, Float, Float)
238+ UNARY (fatan, double , { return TermNode::Float (std::atan (val)); }, Float, Float)
235239
236240BINARY (
237- fatan2, float , float , { return TermNode::Float (std::atan2 (val1, val2)); },
241+ fatan2, double , double , { return TermNode::Float (std::atan2 (val1, val2)); },
238242 Float, Float, Float)
239243
240- UNARY (fcosh, float , { return TermNode::Float (std::cosh (val)); }, Float, Float)
244+ UNARY (fcosh, double , { return TermNode::Float (std::cosh (val)); }, Float, Float)
241245
242- UNARY (fsinh, float , { return TermNode::Float (std::sinh (val)); }, Float, Float)
246+ UNARY (fsinh, double , { return TermNode::Float (std::sinh (val)); }, Float, Float)
243247
244- UNARY (ftanh, float , { return TermNode::Float (std::tanh (val)); }, Float, Float)
248+ UNARY (ftanh, double , { return TermNode::Float (std::tanh (val)); }, Float, Float)
245249
246- UNARY (facosh, float , { return TermNode::Float (std::acosh (val)); }, Float, Float)
250+ UNARY (
251+ facosh, double , { return TermNode::Float (std::acosh (val)); }, Float, Float)
247252
248- UNARY (fasinh, float , { return TermNode::Float (std::asinh (val)); }, Float, Float)
253+ UNARY (
254+ fasinh, double , { return TermNode::Float (std::asinh (val)); }, Float, Float)
249255
250- UNARY (fatanh, float , { return TermNode::Float (std::atanh (val)); }, Float, Float)
256+ UNARY (
257+ fatanh, double , { return TermNode::Float (std::atanh (val)); }, Float, Float)
251258
252259BINARY (
253- fhypot, float , float , { return TermNode::Float (std::hypot (val1, val2)); },
260+ fhypot, double , double , { return TermNode::Float (std::hypot (val1, val2)); },
254261 Float, Float, Float)
255262
256263BINARY (
257- fcopysign, float , float ,
264+ fcopysign, double , double ,
258265 { return TermNode::Float (std::copysign (val1, val2)); }, Float, Float, Float)
259266
260267BINARY (
261- fmod_float, float , float ,
268+ fmod_float, double , double ,
262269 { return TermNode::Float (std::fmod (val1, val2)); }, Float, Float, Float)
263270
264271_UNARY (
265- ffrexp, float ,
272+ ffrexp, double ,
266273 {
267274 int exp;
268275 double sig = std::frexp (val, &exp);
@@ -271,11 +278,11 @@ _UNARY(
271278 Float (), TupleType(TypeNode::Float(), TypeNode::Int()))
272279
273280BINARY(
274- fldexp, float , int , { return TermNode::Float (std::ldexp (val1, val2)); },
281+ fldexp, double , int , { return TermNode::Float (std::ldexp (val1, val2)); },
275282 Float, Int, Float)
276283
277284_UNARY(
278- _fmodf, float ,
285+ _fmodf, double ,
279286 {
280287 double intpart;
281288 double frac = std::modf (val, &intpart);
@@ -285,11 +292,11 @@ _UNARY(
285292 Float (), TupleType(TypeNode::Float(), TypeNode::Float()))
286293
287294UNARY(
288- float_of_int, int , { return TermNode::Float (static_cast <float >(val)); },
295+ float_of_int, int , { return TermNode::Float (static_cast <double >(val)); },
289296 Int, Float)
290297
291298UNARY(
292- int_of_float, float , { return TermNode::Int (static_cast <int >(val)); },
299+ int_of_float, double , { return TermNode::Int (static_cast <int >(val)); },
293300 Float, Int)
294301
295302// ------------------ String functions ------------------
0 commit comments