summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1998-02-02 01:09:35 +0000
committerRichard M. Stallman <rms@gnu.org>1998-02-02 01:09:35 +0000
commiteccf4d74145a00db8fc43b2af628f1660a52bb30 (patch)
tree6b9c03ecbc693669e63632d289a77b96cd81de62 /src
parent0899df6189fdf4c2363897c239df9242e4231166 (diff)
downloademacs-eccf4d74145a00db8fc43b2af628f1660a52bb30.tar.gz
(float_to_string): Handle infinities and NaN specially.
Diffstat (limited to 'src')
-rw-r--r--src/print.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/print.c b/src/print.c
index a9c83ea821d..e3fbc393fea 100644
--- a/src/print.c
+++ b/src/print.c
@@ -956,6 +956,26 @@ float_to_string (buf, data)
unsigned char *cp;
int width;
+ /* Check for plus infinity in a way that won't lose
+ if there is no plus infinity. */
+ if (data == data / 2 && data > 1.0)
+ {
+ strcpy (buf, "1.0e+INF");
+ return;
+ }
+ /* Likewise for minus infinity. */
+ if (data == data / 2 && data < -1.0)
+ {
+ strcpy (buf, "-1.0e+INF");
+ return;
+ }
+ /* Check for NaN in a way that won't fail if there are no NaNs. */
+ if (! (data * 0.0 >= 0.0))
+ {
+ strcpy (buf, "0.0e+NaN");
+ return;
+ }
+
if (NILP (Vfloat_output_format)
|| !STRINGP (Vfloat_output_format))
lose: