From patchwork Wed May 25 01:32:29 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matt Turner X-Patchwork-Id: 12503 Received: (qmail 71018 invoked by alias); 25 May 2016 01:32:33 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 71008 invoked by uid 89); 25 May 2016 01:32:32 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.3 required=5.0 tests=BAYES_00, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS, UPPERCASE_50_75 autolearn=no version=3.3.2 spammy=0x1p114, test_f_f_data, 0x1p113, TEST_f_f X-HELO: mail-pf0-f196.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=MZ2jWrG3EC0r6hXzOs7ZEJ0i9S8stgK1VQktVI3g1B8=; b=hKzL17p8BKU5OqVkiahSVlFqjwTLP6tbhXGgTXj8bNINknOyu/XtADFlqxEc/FnTcJ +IW5IbpvLQKp2Z3lA9CMe63GSBq6mS6EWfaDRCE6aISFidljR2LlGHZ14CsfvMco1O2p q8w5ov6UD4sTlixCx+X+NcQWGX03bdQhpbTmn/MWMMeVlYmGEkOc9VMNQqbZK9MviDbR pJn0OOphJZy4v5Rahnwub3jDPQdiAJQkyHKJPDSxLouY0tmXnhjr02dsmoBb2kN81s16 euvATC8HZPreG12m4+QdOlJNJqQTt4wgK2rU6d+bOG3YveG5xit7hEW4RiXXlxYcKTnD nQ4Q== X-Gm-Message-State: ALyK8tJ8NaCXlBN4oy/4MJDKVaiVLUO4ypqc/CuljnuH0G5c/Gz6hKy/UVdjWkIpBYqDiw== X-Received: by 10.98.23.18 with SMTP id 18mr1859130pfx.96.1464139949686; Tue, 24 May 2016 18:32:29 -0700 (PDT) From: Matt Turner To: libc-alpha@sourceware.org Cc: Joseph Myers , Matt Turner Subject: [PATCH 2/3] Add more tests for trunc. Date: Tue, 24 May 2016 18:32:29 -0700 Message-Id: <1464139950-31943-2-git-send-email-mattst88@gmail.com> In-Reply-To: <1464139950-31943-1-git-send-email-mattst88@gmail.com> References: <1464139950-31943-1-git-send-email-mattst88@gmail.com> Some implementations of truncf(x) add 2**23 to x with the rounding mode set to truncate before subtracting 2**23 to produce the truncated result. Unfortunately this doesn't work for odd values of x greater than 2**23, since the result of the addition is inexact and the parity bit is lost by the rounding step. The same problems apply to implementations of trunc on other floating-point data types. 2016-05-24 Matt Turner * math/libm-test.inc (trunc_test_data): Add tests for odd values. --- math/libm-test.inc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/math/libm-test.inc b/math/libm-test.inc index f1ba7dd..84c119a 100644 --- a/math/libm-test.inc +++ b/math/libm-test.inc @@ -11413,18 +11413,23 @@ static const struct test_f_f_data trunc_test_data[] = TEST_f_f (trunc, 1, 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, 2, 2, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, 0x1p23, 0x1p23, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), + TEST_f_f (trunc, 0x1p23 + 1, 0x1p23 + 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, 0x1p24, 0x1p24, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, 0x1p25, 0x1p25, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, 0x1p52, 0x1p52, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), + TEST_f_f (trunc, 0x1p52 + 1, 0x1p52 + 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, 0x1p53, 0x1p53, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, 0x1p54, 0x1p54, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, 0x1p63, 0x1p63, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), + TEST_f_f (trunc, 0x1p63 + 1, 0x1p63 + 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, 0x1p64, 0x1p64, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, 0x1p65, 0x1p65, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, 0x1p105, 0x1p105, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), + TEST_f_f (trunc, 0x1p105 + 1, 0x1p105 + 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, 0x1p106, 0x1p106, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, 0x1p107, 0x1p107, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, 0x1p112, 0x1p112, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), + TEST_f_f (trunc, 0x1p112 + 1, 0x1p112 + 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, 0x1p113, 0x1p113, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, 0x1p114, 0x1p114, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, max_value, max_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), @@ -11433,18 +11438,23 @@ static const struct test_f_f_data trunc_test_data[] = TEST_f_f (trunc, -1, -1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, -2, -2, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, -0x1p23, -0x1p23, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), + TEST_f_f (trunc, -0x1p23 - 1, -0x1p23 - 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, -0x1p24, -0x1p24, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, -0x1p25, -0x1p25, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, -0x1p52, -0x1p52, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), + TEST_f_f (trunc, -0x1p52 - 1, -0x1p52 - 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, -0x1p53, -0x1p53, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, -0x1p54, -0x1p54, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, -0x1p63, -0x1p63, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), + TEST_f_f (trunc, -0x1p63 - 1, -0x1p63 - 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, -0x1p64, -0x1p64, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, -0x1p65, -0x1p65, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, -0x1p105, -0x1p105, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), + TEST_f_f (trunc, -0x1p105 - 1, -0x1p105 - 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, -0x1p106, -0x1p106, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, -0x1p107, -0x1p107, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, -0x1p112, -0x1p112, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), + TEST_f_f (trunc, -0x1p112 - 1, -0x1p112 - 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, -0x1p113, -0x1p113, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, -0x1p114, -0x1p114, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (trunc, -max_value, -max_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),