aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2025-12-11 17:32:26 -0500
committerBruce Hill <bruce@bruce-hill.com>2025-12-11 17:32:26 -0500
commitc2a60d9b4ff9f70505a6240e1e960e7c6230e4af (patch)
tree6fc280e425076f0e9f6ecc06f7bde5ac1609e935 /src
parent4aa983f2505264560c526b5a8987579ae4d5c734 (diff)
Print reals
Diffstat (limited to 'src')
-rw-r--r--src/stdlib/print.c6
-rw-r--r--src/stdlib/print.h2
2 files changed, 8 insertions, 0 deletions
diff --git a/src/stdlib/print.c b/src/stdlib/print.c
index 7da1343f..5d90d6c3 100644
--- a/src/stdlib/print.c
+++ b/src/stdlib/print.c
@@ -7,13 +7,16 @@
#include "fpconv.h"
#include "print.h"
+#include "reals.h"
#include "util.h"
public
int _print_int(FILE *f, int64_t n) {
+ if (n == 0) return fputc('0', f);
char buf[21] = {[20] = 0}; // Big enough for INT64_MIN + '\0'
char *p = &buf[19];
bool negative = n < 0;
+ if (negative) n = -n;
do {
*(p--) = '0' + (n % 10);
@@ -93,6 +96,9 @@ int _print_double(FILE *f, double n) {
}
public
+int _print_real(FILE *f, Real_t n) { return Text$print(f, Real$value_as_text(n, 10)); }
+
+public
int _print_hex_double(FILE *f, hex_double_t hex) {
if (hex.d != hex.d) return fputs("NAN", f);
else if (hex.d == 1.0 / 0.0) return fputs("INF", f);
diff --git a/src/stdlib/print.h b/src/stdlib/print.h
index 7106d561..65de72a0 100644
--- a/src/stdlib/print.h
+++ b/src/stdlib/print.h
@@ -77,6 +77,7 @@ typedef struct {
int _print_int(FILE *f, int64_t x);
int _print_uint(FILE *f, uint64_t x);
int _print_double(FILE *f, double x);
+int _print_real(FILE *f, Real_t x);
int _print_hex(FILE *f, hex_format_t hex);
int _print_hex_double(FILE *f, hex_double_t hex);
int _print_oct(FILE *f, oct_format_t oct);
@@ -116,6 +117,7 @@ extern int Int$print(FILE *f, Int_t i);
uint8_t: _print_uint, \
float: _print_float, \
double: _print_double, \
+ Real_t: _print_real, \
hex_format_t: _print_hex, \
hex_double_t: _print_hex_double, \
oct_format_t: _print_oct, \