Module Name:    src
Committed By:   jruoho
Date:           Wed May 30 15:14:11 UTC 2012

Modified Files:
        src/tests/lib/libm: t_exp.c

Log Message:
Add patch from Tetsuya Isaki in PR lib/46433.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/tests/lib/libm/t_exp.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/lib/libm/t_exp.c
diff -u src/tests/lib/libm/t_exp.c:1.1 src/tests/lib/libm/t_exp.c:1.2
--- src/tests/lib/libm/t_exp.c:1.1	Sun Sep 18 05:19:18 2011
+++ src/tests/lib/libm/t_exp.c	Wed May 30 15:14:10 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: t_exp.c,v 1.1 2011/09/18 05:19:18 jruoho Exp $ */
+/* $NetBSD: t_exp.c,v 1.2 2012/05/30 15:14:10 jruoho Exp $ */
 
 /*-
  * Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -32,6 +32,22 @@
 #include <atf-c.h>
 #include <math.h>
 
+/* y = exp(x) */
+static const struct {
+	double x;
+	double y;
+} exp_values[] = {
+	{  -10, 0.4539992976248485e-4, },
+	{   -5, 0.6737946999085467e-2, },
+	{   -1, 0.3678794411714423, },
+	{ -0.1, 0.9048374180359595, },
+	{    0, 1.0000000000000000, },
+	{  0.1, 1.1051709180756477, },
+	{    1, 2.7182818284590452, },
+	{    5, 148.41315910257660, },
+	{   10, 22026.465794806718, },
+};
+
 /*
  * exp2(3)
  */
@@ -305,22 +321,23 @@ ATF_TC_BODY(exp_inf_pos, tc)
 ATF_TC(exp_product);
 ATF_TC_HEAD(exp_product, tc)
 {
-	atf_tc_set_md_var(tc, "descr", "Test exp(x + y) == exp(x) * exp(y)");
+	atf_tc_set_md_var(tc, "descr", "Test some selected exp(x)");
 }
 
 ATF_TC_BODY(exp_product, tc)
 {
 #ifndef __vax__
-	const double x[] = { 0.0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8 };
-	const double y[] = { 8.8, 7.7, 6.6, 5.5, 4.4, 3.3, 2.2, 1.1, 0.0 };
+	double x;
+	double y;
 	const double eps = 1.0e-11;
 	size_t i;
 
-	for (i = 0; i < __arraycount(x); i++) {
+	for (i = 0; i < __arraycount(exp_values); i++) {
+		x = exp_values[i].x;
+		y = exp_values[i].y;
 
-		if (fabs(exp(x[i] + y[i]) - (exp(x[i]) * exp(y[i]))) > eps)
-			atf_tc_fail_nonfatal("exp(%0.01f + %0.01f) != exp("
-			    "%0.01f) * exp(%0.01f)", x[i], y[i], x[i], y[i]);
+		if (fabs(exp(x) - y) > eps)
+			atf_tc_fail_nonfatal("exp(%0.01f) != %18.18e", x, y);
 	}
 #endif
 }
@@ -413,22 +430,23 @@ ATF_TC_BODY(expf_inf_pos, tc)
 ATF_TC(expf_product);
 ATF_TC_HEAD(expf_product, tc)
 {
-	atf_tc_set_md_var(tc, "descr", "Test expf(x+y) == expf(x) * expf(y)");
+	atf_tc_set_md_var(tc, "descr", "Test some selected expf(x)");
 }
 
 ATF_TC_BODY(expf_product, tc)
 {
 #ifndef __vax__
-	const float x[] = { 0.0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8 };
-	const float y[] = { 8.8, 7.7, 6.6, 5.5, 4.4, 3.3, 2.2, 1.1, 0.0 };
+	float x;
+	float y;
 	const float eps = 1.0e-2;
 	size_t i;
 
-	for (i = 0; i < __arraycount(x); i++) {
+	for (i = 0; i < __arraycount(exp_values); i++) {
+		x = exp_values[i].x;
+		y = exp_values[i].y;
 
-		if (fabsf(expf(x[i] + y[i]) - (expf(x[i]) * expf(y[i]))) > eps)
-			atf_tc_fail_nonfatal("expf(%0.01f + %0.01f) != expf("
-			    "%0.01f) * expf(%0.01f)", x[i], y[i], x[i], y[i]);
+		if (fabsf(expf(x) - y) > eps)
+			atf_tc_fail_nonfatal("expf(%0.01f) != %18.18e", x, y);
 	}
 #endif
 }

Reply via email to