Module Name: src
Committed By: drochner
Date: Wed Jan 27 14:10:41 UTC 2010
Modified Files:
src/lib/libc/compat/gen: compat_modf_ieee754.c
src/lib/libc/gen: modf_ieee754.c
Log Message:
fix behavior in case of +-Inf or NaN input: return the proper
values and set *iptr
(This code is only used under non-default build options, and on m68k.)
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/lib/libc/compat/gen/compat_modf_ieee754.c
cvs rdiff -u -r1.2 -r1.3 src/lib/libc/gen/modf_ieee754.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libc/compat/gen/compat_modf_ieee754.c
diff -u src/lib/libc/compat/gen/compat_modf_ieee754.c:1.2 src/lib/libc/compat/gen/compat_modf_ieee754.c:1.3
--- src/lib/libc/compat/gen/compat_modf_ieee754.c:1.2 Sun Sep 28 15:19:09 2008
+++ src/lib/libc/compat/gen/compat_modf_ieee754.c Wed Jan 27 14:10:41 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_modf_ieee754.c,v 1.2 2008/09/28 15:19:09 christos Exp $ */
+/* $NetBSD: compat_modf_ieee754.c,v 1.3 2010/01/27 14:10:41 drochner Exp $ */
/*
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
@@ -49,11 +49,13 @@
u_int64_t frac;
/*
- * If input is Inf or NaN, return it and leave i alone.
+ * If input is +/-Inf or NaN, return +/-0 or NaN.
*/
u.dblu_d = val;
- if (u.dblu_dbl.dbl_exp == DBL_EXP_INFNAN)
- return (u.dblu_d);
+ if (u.dblu_dbl.dbl_exp == DBL_EXP_INFNAN) {
+ *iptr = u.dblu_d;
+ return (0.0 / u.dblu_d);
+ }
/*
* If input can't have a fractional part, return
Index: src/lib/libc/gen/modf_ieee754.c
diff -u src/lib/libc/gen/modf_ieee754.c:1.2 src/lib/libc/gen/modf_ieee754.c:1.3
--- src/lib/libc/gen/modf_ieee754.c:1.2 Mon Oct 27 00:05:46 2003
+++ src/lib/libc/gen/modf_ieee754.c Wed Jan 27 14:10:41 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: modf_ieee754.c,v 1.2 2003/10/27 00:05:46 kleink Exp $ */
+/* $NetBSD: modf_ieee754.c,v 1.3 2010/01/27 14:10:41 drochner Exp $ */
/*
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
@@ -46,11 +46,13 @@
u_int64_t frac;
/*
- * If input is Inf or NaN, return it and leave i alone.
+ * If input is +/-Inf or NaN, return +/-0 or NaN.
*/
u.dblu_d = val;
- if (u.dblu_dbl.dbl_exp == DBL_EXP_INFNAN)
- return (u.dblu_d);
+ if (u.dblu_dbl.dbl_exp == DBL_EXP_INFNAN) {
+ *iptr = u.dblu_d;
+ return (0.0 / u.dblu_d);
+ }
/*
* If input can't have a fractional part, return