public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug libfortran/93567] G edit descriptor uses E instead of F editing in rounding mode UP
[not found] <bug-93567-4@http.gcc.gnu.org/bugzilla/>
@ 2020-07-12 15:59 ` dominiq at lps dot ens.fr
2020-07-20 10:11 ` dominiq at lps dot ens.fr
` (11 subsequent siblings)
12 siblings, 0 replies; 13+ messages in thread
From: dominiq at lps dot ens.fr @ 2020-07-12 15:59 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93567
Dominique d'Humieres <dominiq at lps dot ens.fr> changed:
What |Removed |Added
----------------------------------------------------------------------------
Ever confirmed|0 |1
Status|UNCONFIRMED |NEW
Last reconfirmed| |2020-07-12
--- Comment #2 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
See also pr93592.
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug libfortran/93567] G edit descriptor uses E instead of F editing in rounding mode UP
[not found] <bug-93567-4@http.gcc.gnu.org/bugzilla/>
2020-07-12 15:59 ` [Bug libfortran/93567] G edit descriptor uses E instead of F editing in rounding mode UP dominiq at lps dot ens.fr
@ 2020-07-20 10:11 ` dominiq at lps dot ens.fr
2020-07-20 16:35 ` dominiq at lps dot ens.fr
` (10 subsequent siblings)
12 siblings, 0 replies; 13+ messages in thread
From: dominiq at lps dot ens.fr @ 2020-07-20 10:11 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93567
Dominique d'Humieres <dominiq at lps dot ens.fr> changed:
What |Removed |Added
----------------------------------------------------------------------------
Priority|P3 |P4
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug libfortran/93567] G edit descriptor uses E instead of F editing in rounding mode UP
[not found] <bug-93567-4@http.gcc.gnu.org/bugzilla/>
2020-07-12 15:59 ` [Bug libfortran/93567] G edit descriptor uses E instead of F editing in rounding mode UP dominiq at lps dot ens.fr
2020-07-20 10:11 ` dominiq at lps dot ens.fr
@ 2020-07-20 16:35 ` dominiq at lps dot ens.fr
2020-07-20 22:44 ` dominiq at lps dot ens.fr
` (9 subsequent siblings)
12 siblings, 0 replies; 13+ messages in thread
From: dominiq at lps dot ens.fr @ 2020-07-20 16:35 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93567
--- Comment #3 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
With
--- ../_clean/libgfortran/io/write_float.def 2020-06-13 03:11:55.000000000
+0200
+++ libgfortran/io/write_float.def 2020-07-20 18:17:41.000000000 +0200
@@ -990,7 +990,7 @@ determine_en_precision (st_parameter_dt
switch (dtp->u.p.current_unit->round_status)\
{\
case ROUND_ZERO:\
- r = sign_bit ? 1.0 : 0.0;\
+ r = sign_bit ? -1.0 : 0.0;\
break;\
case ROUND_UP:\
r = 1.0;\
@@ -1004,7 +1004,7 @@ determine_en_precision (st_parameter_dt
exp_d = calculate_exp_ ## x (d);\
r_sc = (1 - r / exp_d);\
temp = 0.1 * r_sc;\
- if ((m > 0.0 && ((m < temp) || (r >= (exp_d - m))))\
+ if ((m > 0.0 && ((m < temp) || (r > (exp_d - m - sign_bit))))\
|| ((m == 0.0) && !(compile_options.allow_std\
& (GFC_STD_F2003 | GFC_STD_F2008)))\
|| d == 0)\
the extended test case
program test_rug
print "(G12.2, a)", 99.0_8, " expected 99."
print "(G12.2, a)", 100.0_8, " expected 0.10E+03"
print "(RU,G12.2, a)", 99.0_8, " expected 99."
print "(RU,G12.2, a)", 99.01_8, " expected 0.10E+03"
print "(RU,G12.4,a)", 99.0_8 , " expected 99.00"
print "(RU,G12.4,a)", 99.01_8, " expected 99.02"
print "(RD,G12.2,a)", 99.0_8, " expected 99."
print "(RD,G12.2,a)", 99.01_8, " expected 99."
print "(RD,G12.2,a)", -99.0_8, " expected -99."
print "(RD,G12.2,a)", -99.01_8, " expected -0.10E+03"
print "(RD,G12.2,a)", -100.00_8, " expected -0.10E+03"
print "(Rz,G12.2,a)", -99.01_8, " expected -99."
print "(Rz,G12.2,a)", -100.01_8, " expected -0.10E+03"
end
gives the expected results.
Note that this "fix" is empirical and I am not 100% convinced it will work for
all cases.
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug libfortran/93567] G edit descriptor uses E instead of F editing in rounding mode UP
[not found] <bug-93567-4@http.gcc.gnu.org/bugzilla/>
` (2 preceding siblings ...)
2020-07-20 16:35 ` dominiq at lps dot ens.fr
@ 2020-07-20 22:44 ` dominiq at lps dot ens.fr
2020-07-20 23:17 ` dominiq at lps dot ens.fr
` (8 subsequent siblings)
12 siblings, 0 replies; 13+ messages in thread
From: dominiq at lps dot ens.fr @ 2020-07-20 22:44 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93567
--- Comment #4 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
The patch in comment 3 broke gfortran.dg/round_3.f08.
The following should work
--- ../_clean/libgfortran/io/write_float.def 2020-06-13 03:11:55.000000000
+0200
+++ libgfortran/io/write_float.def 2020-07-21 00:37:24.000000000 +0200
@@ -1004,7 +1004,11 @@ determine_en_precision (st_parameter_dt
exp_d = calculate_exp_ ## x (d);\
r_sc = (1 - r / exp_d);\
temp = 0.1 * r_sc;\
- if ((m > 0.0 && ((m < temp) || (r >= (exp_d - m))))\
+ if ((m > 0.0 && ((m < temp) || (r == 0.5 && r >= (exp_d - m))\
+ || (r == 1 && !sign_bit && 1 > (exp_d - m))\
+ || (r == 1 && sign_bit && 0 >= (exp_d - m))\
+ || (r == 0 && !sign_bit && 0 >= (exp_d - m))\
+ || (r ==0 && sign_bit && 1 > (exp_d - m))))\
|| ((m == 0.0) && !(compile_options.allow_std\
& (GFC_STD_F2003 | GFC_STD_F2008)))\
|| d == 0)\
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug libfortran/93567] G edit descriptor uses E instead of F editing in rounding mode UP
[not found] <bug-93567-4@http.gcc.gnu.org/bugzilla/>
` (3 preceding siblings ...)
2020-07-20 22:44 ` dominiq at lps dot ens.fr
@ 2020-07-20 23:17 ` dominiq at lps dot ens.fr
2020-07-20 23:34 ` jvdelisle at charter dot net
` (7 subsequent siblings)
12 siblings, 0 replies; 13+ messages in thread
From: dominiq at lps dot ens.fr @ 2020-07-20 23:17 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93567
--- Comment #5 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
Test case
--- ../_clean/gcc/testsuite/gfortran.dg/round_3.f08 2020-06-13
03:11:54.000000000 +0200
+++ gcc/testsuite/gfortran.dg/round_3.f08 2020-07-21 01:14:56.000000000
+0200
@@ -110,6 +110,30 @@ program pr48615
call checkfmt("(RU,E17.1)", nearest(2.0, 1.0), " 0.3E+01")
call checkfmt("(RD,E17.1)", nearest(3.0, -1.0), " 0.2E+01")
+ call checkfmt("(G12.2)", 99.0, " 99. ")
+ call checkfmt("(G12.2)", 99.5, " 0.10E+03")
+ call checkfmt("(G12.2)", 100.0, " 0.10E+03")
+ call checkfmt("(G12.2)", -99.0, " -99. ")
+ call checkfmt("(G12.2)", -99.5, " -0.10E+03")
+ call checkfmt("(G12.2)", -100.0, " -0.10E+03")
+ call checkfmt("(RU,G12.2)", 99.0, " 99. ") ! pr93567
+ call checkfmt("(RU,G12.2)", 99.01, " 0.10E+03")
+ call checkfmt("(RU,G12.2)", -99.0, " -99. ")
+ call checkfmt("(RU,G12.2)", -99.01, " -99. ")
+ call checkfmt("(RU,G12.2)", -100.01, " -0.10E+03")
+ call checkfmt("(RU,G12.4)", 99.0 , " 99.00 ")
+ call checkfmt("(RU,G12.4)", 99.01, " 99.02 ")
+ call checkfmt("(RD,G12.2)", 99.0, " 99. ")
+ call checkfmt("(RD,G12.2)", 99.01, " 99. ")
+ call checkfmt("(RD,G12.2)", 100.01, " 0.10E+03")
+ call checkfmt("(RD,G12.2)", -99.0, " -99. ")
+ call checkfmt("(RD,G12.2)", -99.01, " -0.10E+03")
+ call checkfmt("(RD,G12.2)", -100.00, " -0.10E+03")
+ call checkfmt("(Rz,G12.2)", 99.01, " 99. ")
+ call checkfmt("(Rz,G12.2)", 100.01, " 0.10E+03")
+ call checkfmt("(Rz,G12.2)", -99.01, " -99. ")
+ call checkfmt("(Rz,G12.2)", -100.01, " -0.10E+03")
+
contains
subroutine checkfmt(fmt, x, cmp)
character(len=*), intent(in) :: fmt
@@ -119,6 +143,6 @@ contains
write(s, fmt) x
if (s /= cmp) STOP 1
- !if (s /= cmp) print "(a,1x,a,' expected: ',1x)", fmt, s, cmp
+ !if (s /= cmp) print "(a,1x,a,' expected: ',1x,a)", fmt, s, cmp
end subroutine
end program
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug libfortran/93567] G edit descriptor uses E instead of F editing in rounding mode UP
[not found] <bug-93567-4@http.gcc.gnu.org/bugzilla/>
` (4 preceding siblings ...)
2020-07-20 23:17 ` dominiq at lps dot ens.fr
@ 2020-07-20 23:34 ` jvdelisle at charter dot net
2020-07-21 12:12 ` dominiq at lps dot ens.fr
` (6 subsequent siblings)
12 siblings, 0 replies; 13+ messages in thread
From: jvdelisle at charter dot net @ 2020-07-20 23:34 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93567
jvdelisle at charter dot net changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jvdelisle at charter dot net
--- Comment #6 from jvdelisle at charter dot net ---
(In reply to Dominique d'Humieres from comment #4)
> The patch in comment 3 broke gfortran.dg/round_3.f08.
>
> The following should work
>
> --- ../_clean/libgfortran/io/write_float.def 2020-06-13 03:11:55.000000000
> +0200
> +++ libgfortran/io/write_float.def 2020-07-21 00:37:24.000000000 +0200
> @@ -1004,7 +1004,11 @@ determine_en_precision (st_parameter_dt
> exp_d = calculate_exp_ ## x (d);\
> r_sc = (1 - r / exp_d);\
> temp = 0.1 * r_sc;\
> - if ((m > 0.0 && ((m < temp) || (r >= (exp_d - m))))\
> + if ((m > 0.0 && ((m < temp) || (r == 0.5 && r >= (exp_d - m))\
> + || (r == 1 && !sign_bit && 1 > (exp_d - m))\
> + || (r == 1 && sign_bit && 0 >= (exp_d - m))\
> + || (r == 0 && !sign_bit && 0 >= (exp_d - m))\
> + || (r ==0 && sign_bit && 1 > (exp_d - m))))\
^
> || ((m == 0.0) && !(compile_options.allow_std\
> & (GFC_STD_F2003 | GFC_STD_F2008)))\
> || d == 0)\
It gets complicated quickly with all the corner cases. Lat line of the added
logic needs a space before the 0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug libfortran/93567] G edit descriptor uses E instead of F editing in rounding mode UP
[not found] <bug-93567-4@http.gcc.gnu.org/bugzilla/>
` (5 preceding siblings ...)
2020-07-20 23:34 ` jvdelisle at charter dot net
@ 2020-07-21 12:12 ` dominiq at lps dot ens.fr
2020-07-21 21:41 ` dominiq at lps dot ens.fr
` (5 subsequent siblings)
12 siblings, 0 replies; 13+ messages in thread
From: dominiq at lps dot ens.fr @ 2020-07-21 12:12 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93567
--- Comment #7 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
> It gets complicated quickly with all the corner cases.
I tried to simplify, but I did find anything simpler and working.
> Last line of the added logic needs a space before the 0
Yes.
I have learnt enough git to follow the GCC evolution, but I am not ready (yet?)
to do any commit.
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug libfortran/93567] G edit descriptor uses E instead of F editing in rounding mode UP
[not found] <bug-93567-4@http.gcc.gnu.org/bugzilla/>
` (6 preceding siblings ...)
2020-07-21 12:12 ` dominiq at lps dot ens.fr
@ 2020-07-21 21:41 ` dominiq at lps dot ens.fr
2020-07-21 22:16 ` dominiq at lps dot ens.fr
` (4 subsequent siblings)
12 siblings, 0 replies; 13+ messages in thread
From: dominiq at lps dot ens.fr @ 2020-07-21 21:41 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93567
--- Comment #8 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
Simpler patch with comments
--- ../_clean/libgfortran/io/write_float.def 2020-06-13 03:11:55.000000000
+0200
+++ libgfortran/io/write_float.def 2020-07-21 23:03:08.000000000 +0200
@@ -987,16 +987,19 @@ determine_en_precision (st_parameter_dt
w = default_width;\
d = precision;\
}\
+ /* The switch between FMT_E and FMT_F is based on the absolute value. \
+ Set r=0 for rounding toward zero and r = 1 otherwise. \
+ If (exp_d - m) == 1 there is no rounding needed. */\
switch (dtp->u.p.current_unit->round_status)\
{\
case ROUND_ZERO:\
- r = sign_bit ? 1.0 : 0.0;\
+ r = 0.0;\
break;\
case ROUND_UP:\
- r = 1.0;\
+ r = sign_bit ? 0.0 : 1.0;\
break;\
case ROUND_DOWN:\
- r = 0.0;\
+ r = sign_bit ? 1.0 : 0.0;\
break;\
default:\
break;\
@@ -1004,7 +1007,8 @@ determine_en_precision (st_parameter_dt
exp_d = calculate_exp_ ## x (d);\
r_sc = (1 - r / exp_d);\
temp = 0.1 * r_sc;\
- if ((m > 0.0 && ((m < temp) || (r >= (exp_d - m))))\
+ if ((m > 0.0 && ((m < temp) || (r < 1 && r >= (exp_d - m))\
+ || (r == 1 && 1 > (exp_d - m))))\
|| ((m == 0.0) && !(compile_options.allow_std\
& (GFC_STD_F2003 | GFC_STD_F2008)))\
|| d == 0)\
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug libfortran/93567] G edit descriptor uses E instead of F editing in rounding mode UP
[not found] <bug-93567-4@http.gcc.gnu.org/bugzilla/>
` (7 preceding siblings ...)
2020-07-21 21:41 ` dominiq at lps dot ens.fr
@ 2020-07-21 22:16 ` dominiq at lps dot ens.fr
2020-07-23 21:24 ` dominiq at lps dot ens.fr
` (3 subsequent siblings)
12 siblings, 0 replies; 13+ messages in thread
From: dominiq at lps dot ens.fr @ 2020-07-21 22:16 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93567
--- Comment #9 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
patch submitted at https://gcc.gnu.org/pipermail/fortran/2020-July/054770.html.
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug libfortran/93567] G edit descriptor uses E instead of F editing in rounding mode UP
[not found] <bug-93567-4@http.gcc.gnu.org/bugzilla/>
` (8 preceding siblings ...)
2020-07-21 22:16 ` dominiq at lps dot ens.fr
@ 2020-07-23 21:24 ` dominiq at lps dot ens.fr
2020-07-24 18:48 ` cvs-commit at gcc dot gnu.org
` (2 subsequent siblings)
12 siblings, 0 replies; 13+ messages in thread
From: dominiq at lps dot ens.fr @ 2020-07-23 21:24 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93567
--- Comment #10 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
Created attachment 48922
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=48922&action=edit
Patch adjusted for GCC8 and 9
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug libfortran/93567] G edit descriptor uses E instead of F editing in rounding mode UP
[not found] <bug-93567-4@http.gcc.gnu.org/bugzilla/>
` (9 preceding siblings ...)
2020-07-23 21:24 ` dominiq at lps dot ens.fr
@ 2020-07-24 18:48 ` cvs-commit at gcc dot gnu.org
2020-07-25 10:55 ` cvs-commit at gcc dot gnu.org
2020-07-25 15:25 ` dominiq at lps dot ens.fr
12 siblings, 0 replies; 13+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2020-07-24 18:48 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93567
--- Comment #11 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Thomas Kथà¤nig <tkoenig@gcc.gnu.org>:
https://gcc.gnu.org/g:aa7e7eff5ec165dc8463a0e74309801b15d1feda
commit r11-2310-gaa7e7eff5ec165dc8463a0e74309801b15d1feda
Author: Dominique d'Humieres <dhumieres.dominique@free.fr>
Date: Fri Jul 24 20:27:53 2020 +0200
PR 93567, G edit descriptor uses E instead of F editing in rounding mode
UP.
The switch between FMT_E and FMT_F is based on the absolute value.
Set r=0 for rounding toward zero and r = 1 otherwise.
If (exp_d - m) == 1 there is no rounding needed.
libgfortran/ChangeLog:
PR fortran/93567
* io/write_float.def (determine_en_precision): Fix switch between
FMT_E and FMT_F.
gcc/testsuite/ChangeLog:
PR fortran/93567
* gfortran.dg/round_3.f08: Add test cases.
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug libfortran/93567] G edit descriptor uses E instead of F editing in rounding mode UP
[not found] <bug-93567-4@http.gcc.gnu.org/bugzilla/>
` (10 preceding siblings ...)
2020-07-24 18:48 ` cvs-commit at gcc dot gnu.org
@ 2020-07-25 10:55 ` cvs-commit at gcc dot gnu.org
2020-07-25 15:25 ` dominiq at lps dot ens.fr
12 siblings, 0 replies; 13+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2020-07-25 10:55 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93567
--- Comment #12 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-10 branch has been updated by Thomas Kथà¤nig
<tkoenig@gcc.gnu.org>:
https://gcc.gnu.org/g:d0dbe7695cf1e7a7163952797c4590cfda137541
commit r10-8532-gd0dbe7695cf1e7a7163952797c4590cfda137541
Author: Dominique d'Humieres <dhumieres.dominique@free.fr>
Date: Fri Jul 24 20:27:53 2020 +0200
PR 93567, G edit descriptor uses E instead of F editing in rounding mode
UP.
The switch between FMT_E and FMT_F is based on the absolute value.
Set r=0 for rounding toward zero and r = 1 otherwise.
If (exp_d - m) == 1 there is no rounding needed.
libgfortran/ChangeLog:
PR fortran/93567
* io/write_float.def (determine_en_precision): Fix switch between
FMT_E and FMT_F.
gcc/testsuite/ChangeLog:
PR fortran/93567
* gfortran.dg/round_3.f08: Add test cases.
(cherry picked from commit aa7e7eff5ec165dc8463a0e74309801b15d1feda)
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug libfortran/93567] G edit descriptor uses E instead of F editing in rounding mode UP
[not found] <bug-93567-4@http.gcc.gnu.org/bugzilla/>
` (11 preceding siblings ...)
2020-07-25 10:55 ` cvs-commit at gcc dot gnu.org
@ 2020-07-25 15:25 ` dominiq at lps dot ens.fr
12 siblings, 0 replies; 13+ messages in thread
From: dominiq at lps dot ens.fr @ 2020-07-25 15:25 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93567
Dominique d'Humieres <dominiq at lps dot ens.fr> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution|--- |FIXED
--- Comment #13 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
Patch applied to the GCC10 and 11 branches. Closing.
Thanks for the report.
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2020-07-25 15:25 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <bug-93567-4@http.gcc.gnu.org/bugzilla/>
2020-07-12 15:59 ` [Bug libfortran/93567] G edit descriptor uses E instead of F editing in rounding mode UP dominiq at lps dot ens.fr
2020-07-20 10:11 ` dominiq at lps dot ens.fr
2020-07-20 16:35 ` dominiq at lps dot ens.fr
2020-07-20 22:44 ` dominiq at lps dot ens.fr
2020-07-20 23:17 ` dominiq at lps dot ens.fr
2020-07-20 23:34 ` jvdelisle at charter dot net
2020-07-21 12:12 ` dominiq at lps dot ens.fr
2020-07-21 21:41 ` dominiq at lps dot ens.fr
2020-07-21 22:16 ` dominiq at lps dot ens.fr
2020-07-23 21:24 ` dominiq at lps dot ens.fr
2020-07-24 18:48 ` cvs-commit at gcc dot gnu.org
2020-07-25 10:55 ` cvs-commit at gcc dot gnu.org
2020-07-25 15:25 ` dominiq at lps dot ens.fr
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).