Module Name: src Committed By: riastradh Date: Sun May 12 20:58:44 UTC 2024
Modified Files: src/tests/lib/libm: t_hypot.c Log Message: t_hypot: Use an ld80 test case that actually fits in ld80. Also add comments explaining how I generated these test cases. (No autoconf back doors hidden in these magic numbers, I promise! No pythagoreans were harmed in the production of these tests either.) To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/tests/lib/libm/t_hypot.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_hypot.c diff -u src/tests/lib/libm/t_hypot.c:1.6 src/tests/lib/libm/t_hypot.c:1.7 --- src/tests/lib/libm/t_hypot.c:1.6 Sat May 11 20:51:41 2024 +++ src/tests/lib/libm/t_hypot.c Sun May 12 20:58:44 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: t_hypot.c,v 1.6 2024/05/11 20:51:41 riastradh Exp $ */ +/* $NetBSD: t_hypot.c,v 1.7 2024/05/12 20:58:44 riastradh Exp $ */ /*- * Copyright (c) 2016 The NetBSD Foundation, Inc. @@ -440,6 +440,23 @@ ATF_TC_BODY(hypotl_trivial, tc) } } +/* + * All primitive Pythagorean triples are generated from coprime + * integers m > n > 0 by Euclid's formula, + * + * a = m^2 - n^2 + * b = 2 m n, + * c = m^2 + n^2. + * + * We test cases with various different numbers and positions of bits, + * generated by this formula. + * + * If you're curious, you can recover m and n from a, b, and c by + * + * m = sqrt((a + c)/2) + * n = b/2m. + */ + __CTASSERT(FLT_MANT_DIG >= 24); static const struct { float a, b, c; @@ -468,7 +485,7 @@ static const struct { long double a, b, c; } exact_casesl[] = { { 3458976450080784639, 4611968592949214720, 5764960744407842561 }, - { 0x1ffffffff, 0x1fffffffe00000000p0L, 0x1fffffffe00000001p0L }, + { 0x200000000, 0x7ffffffffffffffe, 0x8000000000000002 }, #if LDBL_MANT_DIG >= 113 { 973555668229277869436257492279295.L, 1298074224305703705819019479072768.L,