summaryrefslogtreecommitdiff
path: root/ruby_1_8_6/missing/isinf.c
diff options
context:
space:
mode:
authorshyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-07-07 07:36:34 +0000
committershyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-07-07 07:36:34 +0000
commit441546edcfbb1b346c87b69c5f578d1a0e522e06 (patch)
tree04f606a008baebc445f38944ad37e87468da29ea /ruby_1_8_6/missing/isinf.c
parentfa93611c0f9a6db146341c792bfe3b7322ec00e2 (diff)
add tag v1_8_6_269
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_8_6_269@17937 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ruby_1_8_6/missing/isinf.c')
-rw-r--r--ruby_1_8_6/missing/isinf.c72
1 files changed, 72 insertions, 0 deletions
diff --git a/ruby_1_8_6/missing/isinf.c b/ruby_1_8_6/missing/isinf.c
new file mode 100644
index 0000000000..c9e49c6795
--- /dev/null
+++ b/ruby_1_8_6/missing/isinf.c
@@ -0,0 +1,72 @@
+/* public domain rewrite of isinf(3) */
+
+#ifdef __osf__
+
+#define _IEEE 1
+#include <nan.h>
+
+int
+isinf(n)
+ double n;
+{
+ if (IsNANorINF(n) && IsINF(n)) {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+}
+
+#else
+
+#include "config.h"
+
+#if defined(HAVE_FINITE) && defined(HAVE_ISNAN)
+
+#include <math.h>
+#ifdef HAVE_IEEEFP_H
+#include <ieeefp.h>
+#endif
+
+/*
+ * isinf may be provided only as a macro.
+ * ex. HP-UX, Solaris 10
+ * http://www.gnu.org/software/automake/manual/autoconf/Function-Portability.html
+ */
+#ifndef isinf
+int
+isinf(n)
+ double n;
+{
+ return (!finite(n) && !isnan(n));
+}
+#endif
+
+#else
+
+#ifdef HAVE_STRING_H
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+
+static double zero() { return 0.0; }
+static double one() { return 1.0; }
+static double inf() { return one() / zero(); }
+
+int
+isinf(n)
+ double n;
+{
+ static double pinf = 0.0;
+ static double ninf = 0.0;
+
+ if (pinf == 0.0) {
+ pinf = inf();
+ ninf = -pinf;
+ }
+ return memcmp(&n, &pinf, sizeof n) == 0
+ || memcmp(&n, &ninf, sizeof n) == 0;
+}
+#endif
+#endif