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

Reply via email to