From patchwork Mon Nov 11 13:45:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 842462 Delivered-To: patch@linaro.org Received: by 2002:a5d:6307:0:b0:381:e71e:8f7b with SMTP id i7csp3034711wru; Mon, 11 Nov 2024 05:49:42 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCXeXIblLcPrOZidyuSzCI5/FitNU4LVmKMDFbLj4UxxTZ7XyuRI3ubolO9q/CFV/oPG13YKKg==@linaro.org X-Google-Smtp-Source: AGHT+IEFGYHNh/DCpRTijCyYPTe4ilPnE7kViraoNnVzvAY/HGioajTIr8JIfJY84nHM6CB5+KCA X-Received: by 2002:a05:622a:578b:b0:460:3f14:89e2 with SMTP id d75a77b69052e-46309acefe3mr195414471cf.15.1731332982350; Mon, 11 Nov 2024 05:49:42 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1731332982; cv=pass; d=google.com; s=arc-20240605; b=GwNFgXIIbhkUI39kQVvrqLP67jPRhZUC8MvMfvmMoSmJXYxoVJWhBGFvn18C3ArI1p 0uBkJBGQFrs9to6WHgAkRlkYe01VbRPAUR41xqH4SLuIMkYzQFHOrku0d7tAmDAFVJHz 2CsDuSARcgQiQbhGxwFp9PxgIomQQC2957pkLQm+zCeJ9QehVZ8/Owq8ueo+Fsn8CZ9Z XLJlC26PzNe38tMCsKPgRfzt3ZtmJDjY8Ql3USPxLkj3jnKBsmiWmY1lkhg5UJpq/Abu pWRgW2shX/WyE6bF4bbYuYMgGrYlk5By3EAwnM/RUaO5De0NYzem/WVsuXEqKRpIhTXd p7GQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=8Yjplyn4ptb14tb8NZNG2HuGiahq1PCmVj45s7WOHQQ=; fh=dHLBnA+MhGtNtN2B2JMAELi4oD+gmgMg7DL8H0jYbkI=; b=chPCtPYFjSW6Knp8l7KkzXrK12iejQh0m6WuHC4emNSInhxEz5aCpYxNx93zK++3Of WEYzRKUzwv5QUFMI1DcgRMoYJdMA9FTIUSYbKj9gG73+wKWR52wksM4gqkdU5DjnAZ/y Reyn/YTahxfKjnOZzj+jxXPHWpfU5W3XR+PCMR+eHfoAFkiAMBrF4T+AQ90GXHomtlPs xE7hwHWGj7LMmxDGgKkdf9AFatyDs1gPaUkCeWXEWNZbWWPeLzAzy+UYlLHRQFs5dejx C7avo3tocVILf6h1e2Eb48HdKc7nAnFq+iTqM4SUBt5D0LmRSw/8J5IA93YLzJ3AR+UM 6r2A==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Uy3Ffslf; arc=pass (i=1); spf=pass (google.com: domain of libc-alpha-bounces~patch=linaro.org@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="libc-alpha-bounces~patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id d75a77b69052e-462ff6251c5si114881171cf.472.2024.11.11.05.49.42 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Nov 2024 05:49:42 -0800 (PST) Received-SPF: pass (google.com: domain of libc-alpha-bounces~patch=linaro.org@sourceware.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Uy3Ffslf; arc=pass (i=1); spf=pass (google.com: domain of libc-alpha-bounces~patch=linaro.org@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="libc-alpha-bounces~patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id EEAD3385840D for ; Mon, 11 Nov 2024 13:49:41 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pf1-x42c.google.com (mail-pf1-x42c.google.com [IPv6:2607:f8b0:4864:20::42c]) by sourceware.org (Postfix) with ESMTPS id 16DC73858C41 for ; Mon, 11 Nov 2024 13:47:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 16DC73858C41 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 16DC73858C41 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::42c ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1731332892; cv=none; b=wuFvYIgOAwsv2Hly5UKrEoms4bcbXWax5ytxdw5SolC308uDSMz0k6P+koUL74wMzE9chv6mGVqTXa1rBFHfYlUJAg62mpXbdc6JEMOVxd9D6ZGzKjYRKHtk7wbPyqWlnob76XFo5xPTNsU6Halv/QyAxUqBhpIaOKFZJzzczYo= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1731332892; c=relaxed/simple; bh=Dq/Qk1IDhh73gdCE/1Nmxy4k+ztrgKtVL1pPHVZIM08=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=vRMdfKFbuTm70k7AQHHFo9h9MwtLyVsjSswV80DgPHgA4ozCNh1BycijnSzcRe+U64tN1XLo+wNaodnVJYKpuuPsLbVwKcv4CWkukpwLIY7X/o1BiEXiuZ2bY1drwST4jRt/FZjkD3EEcAC5hYhaeQGMoKhJa3gqIyT1VfoQh1w= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pf1-x42c.google.com with SMTP id d2e1a72fcca58-71e4c2e36daso3333290b3a.0 for ; Mon, 11 Nov 2024 05:47:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1731332878; x=1731937678; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=8Yjplyn4ptb14tb8NZNG2HuGiahq1PCmVj45s7WOHQQ=; b=Uy3Ffslf99bfby64iJhe82N97ULPZ19oPIW0MlhE5TW/kwd/dcUNCElI7blADu3fym XeJ3IPZNDfpTifp4wduhUNii45imFtx7MBm/Hcio6eWYrC2RBXmZ2VbBn0lGxl/+xcsH ZYDcXCXYnIRunPiy8TxLE6rfZK5vhV/71HmZY92/gMdzkccv22FXl2TAs672n+0rjzBz Y8eCxcbwK086JF+nPZ7ofbAxn2El68DB6YJ1y7lEQt1I7dX6IBHiUudCK8HAEkJJz+L+ wUcQHF5PkCreNVlz7BQ5948a5WWIUcIR9ZUbHxMogv1x4bkCtVWHdtAbXPGccSoNzUzq NowA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731332878; x=1731937678; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8Yjplyn4ptb14tb8NZNG2HuGiahq1PCmVj45s7WOHQQ=; b=TOYNSBVbYVbOmmdAqKSaZ4yrlCy3WANWR6K210XCtPA7gplkIJxNMRgNGjFQ33dxxf YmJabtlkEhZZinRGrIhE2tUq5Ci/T7150djwaluNa5iziWAqsNym0VprJ3EiiWYMpR7K CO5XUhuqBNEI7UFqvMDnRQaT99oQjMiBlLhSsr8HgWJCm32ZmgFOSjozsJ06aMOR8UCA dVvyh1y/VM8oqtoqxR2g8LkcnW/0Y8ezcOGwT/BsG0Nu1otUpje2/zFq326ljurBNq+b Us1sZts9pfUNW9sxNutqbGy6IrqBCUnIImOxtSc6Cxvrth1iNjnjYXEfoDW8iI8GgTZg WU5g== X-Gm-Message-State: AOJu0YwW5dS9UP2Tmi22U7vsAf26StNirQN+YFq0F5cxUNtKJLfV1N/5 PsboS/8aeTwgTCmWN1Iit3NOGP7vf4OiUSdvbmsrd61Wc9xuvSEMkTag394j3YJLwYZsNO7zk+E zvKgzHw== X-Received: by 2002:a05:6300:6304:b0:1dc:3022:9557 with SMTP id adf61e73a8af0-1dc30229697mr9855197637.16.1731332877548; Mon, 11 Nov 2024 05:47:57 -0800 (PST) Received: from mandiga.. ([2804:1b3:a7c0:1b55:b2b2:a79f:60ab:6ea2]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-7f41f65bf93sm8530126a12.79.2024.11.11.05.47.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Nov 2024 05:47:57 -0800 (PST) From: Adhemerval Zanella To: libc-alpha@sourceware.org Subject: [PATCH 07/11] math: Split s_erfF in erff and erfc Date: Mon, 11 Nov 2024 10:45:45 -0300 Message-ID: <20241111134740.1410635-8-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241111134740.1410635-1-adhemerval.zanella@linaro.org> References: <20241111134740.1410635-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces~patch=linaro.org@sourceware.org So we can eventually replace each implementation. --- math/Makefile | 1 + sysdeps/ieee754/dbl-64/s_erfc.c | 1 + sysdeps/ieee754/float128/s_erfcf128.c | 1 + sysdeps/ieee754/flt-32/s_erfcf.c | 173 ++++++++++++++++++++++++++ sysdeps/ieee754/flt-32/s_erff.c | 77 ------------ sysdeps/ieee754/ldbl-128/s_erfcl.c | 1 + sysdeps/ieee754/ldbl-128ibm/s_erfcl.c | 1 + sysdeps/ieee754/ldbl-96/s_erfcl.c | 1 + 8 files changed, 179 insertions(+), 77 deletions(-) create mode 100644 sysdeps/ieee754/dbl-64/s_erfc.c create mode 100644 sysdeps/ieee754/float128/s_erfcf128.c create mode 100644 sysdeps/ieee754/flt-32/s_erfcf.c create mode 100644 sysdeps/ieee754/ldbl-128/s_erfcl.c create mode 100644 sysdeps/ieee754/ldbl-128ibm/s_erfcl.c create mode 100644 sysdeps/ieee754/ldbl-96/s_erfcl.c diff --git a/math/Makefile b/math/Makefile index b64c3eedd5..2d5e016496 100644 --- a/math/Makefile +++ b/math/Makefile @@ -201,6 +201,7 @@ libm-calls = \ s_ceilF \ s_cosF \ s_erfF \ + s_erfcF \ s_expm1F \ s_fabsF \ s_floorF \ diff --git a/sysdeps/ieee754/dbl-64/s_erfc.c b/sysdeps/ieee754/dbl-64/s_erfc.c new file mode 100644 index 0000000000..95d17c8c28 --- /dev/null +++ b/sysdeps/ieee754/dbl-64/s_erfc.c @@ -0,0 +1 @@ +/* Not required. */ diff --git a/sysdeps/ieee754/float128/s_erfcf128.c b/sysdeps/ieee754/float128/s_erfcf128.c new file mode 100644 index 0000000000..95d17c8c28 --- /dev/null +++ b/sysdeps/ieee754/float128/s_erfcf128.c @@ -0,0 +1 @@ +/* Not required. */ diff --git a/sysdeps/ieee754/flt-32/s_erfcf.c b/sysdeps/ieee754/flt-32/s_erfcf.c new file mode 100644 index 0000000000..fdba278eff --- /dev/null +++ b/sysdeps/ieee754/flt-32/s_erfcf.c @@ -0,0 +1,173 @@ +/* s_erfcf.c -- float version of s_erfc.c. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#if defined(LIBM_SCCS) && !defined(lint) +static char rcsid[] = "$NetBSD: s_erff.c,v 1.4 1995/05/10 20:47:07 jtc Exp $"; +#endif + +#include +#include +#include +#include +#include +#include + + +static const float +tiny = 1e-30, +half= 5.0000000000e-01, /* 0x3F000000 */ +one = 1.0000000000e+00, /* 0x3F800000 */ +two = 2.0000000000e+00, /* 0x40000000 */ + /* c = (subfloat)0.84506291151 */ +erx = 8.4506291151e-01, /* 0x3f58560b */ +/* + * Coefficients for approximation to erf on [0,0.84375] + */ +pp0 = 1.2837916613e-01, /* 0x3e0375d4 */ +pp1 = -3.2504209876e-01, /* 0xbea66beb */ +pp2 = -2.8481749818e-02, /* 0xbce9528f */ +pp3 = -5.7702702470e-03, /* 0xbbbd1489 */ +pp4 = -2.3763017452e-05, /* 0xb7c756b1 */ +qq1 = 3.9791721106e-01, /* 0x3ecbbbce */ +qq2 = 6.5022252500e-02, /* 0x3d852a63 */ +qq3 = 5.0813062117e-03, /* 0x3ba68116 */ +qq4 = 1.3249473704e-04, /* 0x390aee49 */ +qq5 = -3.9602282413e-06, /* 0xb684e21a */ +/* + * Coefficients for approximation to erf in [0.84375,1.25] + */ +pa0 = -2.3621185683e-03, /* 0xbb1acdc6 */ +pa1 = 4.1485610604e-01, /* 0x3ed46805 */ +pa2 = -3.7220788002e-01, /* 0xbebe9208 */ +pa3 = 3.1834661961e-01, /* 0x3ea2fe54 */ +pa4 = -1.1089469492e-01, /* 0xbde31cc2 */ +pa5 = 3.5478305072e-02, /* 0x3d1151b3 */ +pa6 = -2.1663755178e-03, /* 0xbb0df9c0 */ +qa1 = 1.0642088205e-01, /* 0x3dd9f331 */ +qa2 = 5.4039794207e-01, /* 0x3f0a5785 */ +qa3 = 7.1828655899e-02, /* 0x3d931ae7 */ +qa4 = 1.2617121637e-01, /* 0x3e013307 */ +qa5 = 1.3637083583e-02, /* 0x3c5f6e13 */ +qa6 = 1.1984500103e-02, /* 0x3c445aa3 */ +/* + * Coefficients for approximation to erfc in [1.25,1/0.35] + */ +ra0 = -9.8649440333e-03, /* 0xbc21a093 */ +ra1 = -6.9385856390e-01, /* 0xbf31a0b7 */ +ra2 = -1.0558626175e+01, /* 0xc128f022 */ +ra3 = -6.2375331879e+01, /* 0xc2798057 */ +ra4 = -1.6239666748e+02, /* 0xc322658c */ +ra5 = -1.8460508728e+02, /* 0xc3389ae7 */ +ra6 = -8.1287437439e+01, /* 0xc2a2932b */ +ra7 = -9.8143291473e+00, /* 0xc11d077e */ +sa1 = 1.9651271820e+01, /* 0x419d35ce */ +sa2 = 1.3765776062e+02, /* 0x4309a863 */ +sa3 = 4.3456588745e+02, /* 0x43d9486f */ +sa4 = 6.4538726807e+02, /* 0x442158c9 */ +sa5 = 4.2900814819e+02, /* 0x43d6810b */ +sa6 = 1.0863500214e+02, /* 0x42d9451f */ +sa7 = 6.5702495575e+00, /* 0x40d23f7c */ +sa8 = -6.0424413532e-02, /* 0xbd777f97 */ +/* + * Coefficients for approximation to erfc in [1/.35,28] + */ +rb0 = -9.8649431020e-03, /* 0xbc21a092 */ +rb1 = -7.9928326607e-01, /* 0xbf4c9dd4 */ +rb2 = -1.7757955551e+01, /* 0xc18e104b */ +rb3 = -1.6063638306e+02, /* 0xc320a2ea */ +rb4 = -6.3756646729e+02, /* 0xc41f6441 */ +rb5 = -1.0250950928e+03, /* 0xc480230b */ +rb6 = -4.8351919556e+02, /* 0xc3f1c275 */ +sb1 = 3.0338060379e+01, /* 0x41f2b459 */ +sb2 = 3.2579251099e+02, /* 0x43a2e571 */ +sb3 = 1.5367296143e+03, /* 0x44c01759 */ +sb4 = 3.1998581543e+03, /* 0x4547fdbb */ +sb5 = 2.5530502930e+03, /* 0x451f90ce */ +sb6 = 4.7452853394e+02, /* 0x43ed43a7 */ +sb7 = -2.2440952301e+01; /* 0xc1b38712 */ + +float __erfcf(float x) +{ + int32_t hx,ix; + float R,S,P,Q,s,y,z,r; + GET_FLOAT_WORD(hx,x); + ix = hx&0x7fffffff; + if(ix>=0x7f800000) { /* erfc(nan)=nan */ + /* erfc(+-inf)=0,2 */ + float ret = (float)(((uint32_t)hx>>31)<<1)+one/x; + if (FIX_INT_FP_CONVERT_ZERO && ret == 0.0f) + return 0.0f; + return ret; + } + + if(ix < 0x3f580000) { /* |x|<0.84375 */ + if(ix < 0x32800000) /* |x|<2**-26 */ + return one-x; + z = x*x; + r = pp0+z*(pp1+z*(pp2+z*(pp3+z*pp4))); + s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*qq5)))); + y = r/s; + if(hx < 0x3e800000) { /* x<1/4 */ + return one-(x+x*y); + } else { + r = x*y; + r += (x-half); + return half - r ; + } + } + if(ix < 0x3fa00000) { /* 0.84375 <= |x| < 1.25 */ + s = fabsf(x)-one; + P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*pa6))))); + Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*qa6))))); + if(hx>=0) { + z = one-erx; return z - P/Q; + } else { + z = erx+P/Q; return one+z; + } + } + if (ix < 0x41e00000) { /* |x|<28 */ + x = fabsf(x); + s = one/(x*x); + if(ix< 0x4036DB6D) { /* |x| < 1/.35 ~ 2.857143*/ + R=ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*( + ra5+s*(ra6+s*ra7)))))); + S=one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*( + sa5+s*(sa6+s*(sa7+s*sa8))))))); + } else { /* |x| >= 1/.35 ~ 2.857143 */ + if(hx<0&&ix>=0x40c00000) return two-tiny;/* x < -6 */ + R=rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*( + rb5+s*rb6))))); + S=one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*( + sb5+s*(sb6+s*sb7)))))); + } + GET_FLOAT_WORD(ix,x); + SET_FLOAT_WORD(z,ix&0xffffe000); + r = __ieee754_expf(-z*z-(float)0.5625)* + __ieee754_expf((z-x)*(z+x)+R/S); + if(hx>0) { + float ret = math_narrow_eval (r/x); + if (ret == 0) + __set_errno (ERANGE); + return ret; + } else + return two-r/x; + } else { + if(hx>0) { + __set_errno (ERANGE); + return tiny*tiny; + } else + return two-tiny; + } +} +libm_alias_float (__erfc, erfc) diff --git a/sysdeps/ieee754/flt-32/s_erff.c b/sysdeps/ieee754/flt-32/s_erff.c index ba297342ea..6c541dba23 100644 --- a/sysdeps/ieee754/flt-32/s_erff.c +++ b/sysdeps/ieee754/flt-32/s_erff.c @@ -27,10 +27,7 @@ static char rcsid[] = "$NetBSD: s_erff.c,v 1.4 1995/05/10 20:47:07 jtc Exp $"; static const float tiny = 1e-30, -half= 5.0000000000e-01, /* 0x3F000000 */ one = 1.0000000000e+00, /* 0x3F800000 */ -two = 2.0000000000e+00, /* 0x40000000 */ - /* c = (subfloat)0.84506291151 */ erx = 8.4506291151e-01, /* 0x3f58560b */ /* * Coefficients for approximation to erf on [0,0.84375] @@ -156,77 +153,3 @@ float __erff(float x) } libm_alias_float (__erf, erf) -float __erfcf(float x) -{ - int32_t hx,ix; - float R,S,P,Q,s,y,z,r; - GET_FLOAT_WORD(hx,x); - ix = hx&0x7fffffff; - if(ix>=0x7f800000) { /* erfc(nan)=nan */ - /* erfc(+-inf)=0,2 */ - float ret = (float)(((uint32_t)hx>>31)<<1)+one/x; - if (FIX_INT_FP_CONVERT_ZERO && ret == 0.0f) - return 0.0f; - return ret; - } - - if(ix < 0x3f580000) { /* |x|<0.84375 */ - if(ix < 0x32800000) /* |x|<2**-26 */ - return one-x; - z = x*x; - r = pp0+z*(pp1+z*(pp2+z*(pp3+z*pp4))); - s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*qq5)))); - y = r/s; - if(hx < 0x3e800000) { /* x<1/4 */ - return one-(x+x*y); - } else { - r = x*y; - r += (x-half); - return half - r ; - } - } - if(ix < 0x3fa00000) { /* 0.84375 <= |x| < 1.25 */ - s = fabsf(x)-one; - P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*pa6))))); - Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*qa6))))); - if(hx>=0) { - z = one-erx; return z - P/Q; - } else { - z = erx+P/Q; return one+z; - } - } - if (ix < 0x41e00000) { /* |x|<28 */ - x = fabsf(x); - s = one/(x*x); - if(ix< 0x4036DB6D) { /* |x| < 1/.35 ~ 2.857143*/ - R=ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*( - ra5+s*(ra6+s*ra7)))))); - S=one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*( - sa5+s*(sa6+s*(sa7+s*sa8))))))); - } else { /* |x| >= 1/.35 ~ 2.857143 */ - if(hx<0&&ix>=0x40c00000) return two-tiny;/* x < -6 */ - R=rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*( - rb5+s*rb6))))); - S=one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*( - sb5+s*(sb6+s*sb7)))))); - } - GET_FLOAT_WORD(ix,x); - SET_FLOAT_WORD(z,ix&0xffffe000); - r = __ieee754_expf(-z*z-(float)0.5625)* - __ieee754_expf((z-x)*(z+x)+R/S); - if(hx>0) { - float ret = math_narrow_eval (r/x); - if (ret == 0) - __set_errno (ERANGE); - return ret; - } else - return two-r/x; - } else { - if(hx>0) { - __set_errno (ERANGE); - return tiny*tiny; - } else - return two-tiny; - } -} -libm_alias_float (__erfc, erfc) diff --git a/sysdeps/ieee754/ldbl-128/s_erfcl.c b/sysdeps/ieee754/ldbl-128/s_erfcl.c new file mode 100644 index 0000000000..95d17c8c28 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128/s_erfcl.c @@ -0,0 +1 @@ +/* Not required. */ diff --git a/sysdeps/ieee754/ldbl-128ibm/s_erfcl.c b/sysdeps/ieee754/ldbl-128ibm/s_erfcl.c new file mode 100644 index 0000000000..95d17c8c28 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm/s_erfcl.c @@ -0,0 +1 @@ +/* Not required. */ diff --git a/sysdeps/ieee754/ldbl-96/s_erfcl.c b/sysdeps/ieee754/ldbl-96/s_erfcl.c new file mode 100644 index 0000000000..95d17c8c28 --- /dev/null +++ b/sysdeps/ieee754/ldbl-96/s_erfcl.c @@ -0,0 +1 @@ +/* Not required. */