Skip to content

Commit 7bb1cac

Browse files
Extend float precision to double
1 parent 8015ad7 commit 7bb1cac

13 files changed

Lines changed: 65 additions & 54 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,4 @@ source/lang/parser/lex*.*pp
9393
source/lang/parser/parser*.*pp
9494
source/lang/parser/*.output
9595
source/lang/parser/*.report
96+
source/lang/parser/*.hh

devel.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
make devel ENABLE_DEVEL=1 && ./build/devel $1
1+
make devel -j ENABLE_DEVEL=1 && ./build/devel $1

resources/AppInfo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ APP_AUTHOR = Charles Averill
44
APP_PRODUCT_CODE = SuperML
55
APP_UNIQUE_ID = 0x3F9AD
66
APP_VER_MAJOR = 0
7-
APP_VER_MINOR = 3
7+
APP_VER_MINOR = 4
88
APP_VER_MICRO = 0

resources/banner/banner.bcres

-32.1 MB
Binary file not shown.

romfs/ex/io.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@ let pi = read_float () in
1313
print_string "You said ";
1414
print_float pi;
1515
print_string ", I say ";
16-
print_float 3.14159265
16+
print_float 3.141592653589793

source/lang/parser/lexer.l

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ using token = MC::MC_Parser::token;
1616

1717
/* helper to build values into the parser semantic variant */
1818
#define BUILD_INT(v) lval->build<int>(v)
19-
#define BUILD_FLOAT(v) lval->build<float>(v)
19+
#define BUILD_FLOAT(v) lval->build<double>(v)
2020
#define BUILD_STR(s) lval->build< std::string >(s)
2121

2222
%}
@@ -72,11 +72,11 @@ using token = MC::MC_Parser::token;
7272
"string" {return token::STRING;}
7373

7474
[0-9]+"."[0-9]*([eE][+-]?[0-9]+)? {
75-
BUILD_FLOAT(atof(yytext));
75+
BUILD_FLOAT(std::stod(yytext));
7676
return token::FLOATLIT;
7777
}
7878
[0-9]+([eE][+-]?[0-9]+)? {
79-
BUILD_INT(atoi(yytext));
79+
BUILD_INT(std::stoi(yytext));
8080
return token::INTLIT;
8181
}
8282

source/lang/parser/parser.y

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646

4747
%type <std::string> ID STRINGLIT
4848
%type <int> INTLIT
49-
%type <float> FLOATLIT
49+
%type <double> FLOATLIT
5050

5151
%right SEMICOLON
5252
%left EQUAL

source/lang/passes/types.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ Term annotate_term_with_types(const Term &term, Subst &S) {
211211
return TermNode::Int(std::get<int>(term->payload));
212212

213213
case TermNode::TmFloat:
214-
return TermNode::Float(std::get<float>(term->payload));
214+
return TermNode::Float(std::get<double>(term->payload));
215215

216216
case TermNode::TmString:
217217
return TermNode::String(std::get<std::string>(term->payload));

source/lang/stdlib/builtins.cpp

Lines changed: 49 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,10 @@ UNARY(
5454
Int, Unit)
5555

5656
UNARY(
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

192193
BINARY(
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

196197
BINARY(
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

200201
BINARY(
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

204205
BINARY(
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

208209
BINARY(
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

236240
BINARY(
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

252259
BINARY(
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

256263
BINARY(
257-
fcopysign, float, float,
264+
fcopysign, double, double,
258265
{ return TermNode::Float(std::copysign(val1, val2)); }, Float, Float, Float)
259266

260267
BINARY(
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

273280
BINARY(
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

287294
UNARY(
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

291298
UNARY(
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 ------------------

source/lang/stdlib/stdlib.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
#include "../../globals.h"
55
#include "../syntax.h"
66
#include <cmath>
7+
#include <iomanip>
8+
#include <limits>
79
#include <string>
810
#include <unordered_map>
911
#include <vector>

0 commit comments

Comments
 (0)