summaryrefslogtreecommitdiff
path: root/libm/nan.c
diff options
context:
space:
mode:
Diffstat (limited to 'libm/nan.c')
-rw-r--r--libm/nan.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/libm/nan.c b/libm/nan.c
new file mode 100644
index 000000000..8d7998896
--- /dev/null
+++ b/libm/nan.c
@@ -0,0 +1,48 @@
+/***********************************************************************
+ nan, nanf, nanl - return quiet NaN
+
+ These functions shall return a quiet NaN, if available, with content
+ indicated through tagp.
+
+ If the implementation does not support quiet NaNs, these functions
+ shall return zero.
+
+ Calls: strlen(), sprintf(), strtod()
+
+***********************************************************************/
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+double nan (const char *tagp)
+{
+ if (tagp[0] != '\0') {
+ char buf[6 + strlen (tagp)];
+ sprintf (buf, "NAN(%s)", tagp);
+ return strtod (buf, NULL);
+ }
+ return NAN;
+}
+
+float nanf (const char *tagp)
+{
+ if (tagp[0] != '\0') {
+ char buf[6 + strlen (tagp)];
+ sprintf (buf, "NAN(%s)", tagp);
+ return strtof (buf, NULL);
+ }
+ return NAN;
+}
+
+#if 0
+long double nanl (const char *tagp)
+{
+ if (tagp[0] != '\0') {
+ char buf[6 + strlen (tagp)];
+ sprintf (buf, "NAN(%s)", tagp);
+ return strtold (buf, NULL);
+ }
+ return NAN;
+}
+#endif