From owner-FreeBSD-users-jp@jp.freebsd.org  Mon Feb  9 17:37:06 1998
Received: by jaz.jp.freebsd.org (8.8.8+3.0Wbeta7/8.7.3) id RAA03523
	Mon, 9 Feb 1998 17:37:06 +0900 (JST)
Received: by jaz.jp.freebsd.org (8.8.8+3.0Wbeta7/8.7.3) with ESMTP id RAA03514
	for <freebsd-users-jp@jp.freebsd.org>; Mon, 9 Feb 1998 17:37:03 +0900 (JST)
Received: from pluto20.pluto.ai.kyutech.ac.jp (matumoto@pluto20.pluto.ai.kyutech.ac.jp [131.206.22.20])
	by pluto.ai.kyutech.ac.jp (8.8.7/3.6Wbeta6-Pluto-Server-Sep/06/1997) with ESMTP id RAA17989;
	Mon, 9 Feb 1998 17:37:01 +0900 (JST)
Received: (from matumoto@localhost) by pluto20.pluto.ai.kyutech.ac.jp (8.8.8/3.5W-PLUTO-NULL-CLIENT-Nov/10/1996) id RAA03209; Mon, 9 Feb 1998 17:37:00 +0900 (JST)
Date: Mon, 9 Feb 1998 17:37:00 +0900 (JST)
Message-Id: <199802090837.RAA03209@pluto20.pluto.ai.kyutech.ac.jp>
From: matumoto@pluto.ai.kyutech.ac.jp (Ryuji Matsumoto)
To: FreeBSD-users-jp@jp.freebsd.org
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
X-Mailer: mnews [version 1.21] 1997-12/23(Tue)
Reply-To: FreeBSD-users-jp@jp.freebsd.org
Precedence: bulk
X-Distribute: distribute [version 2.1 (Alpha) patchlevel=24]
X-Sequence: FreeBSD-users-jp 24352
Subject: [FreeBSD-users-jp 24352] gcc bug
Errors-To: owner-FreeBSD-users-jp@jp.freebsd.org
Sender: owner-FreeBSD-users-jp@jp.freebsd.org

$B$O$8$a$^$7$F!%>>85N4Fs!w6e9)Bg$G$9!%(B

$B@hF|F~$i$;$F$$$?$@$-$^$7$?!%(B

$B:rF|<+Bp$G%W%m%0%i%`$r:n$C$F$$$?$N$G$9$,!$$I$&$d$i(Bgcc$B$N%P%0$N$h$&$J8=(B
$B>]$K$D$-$"$?$j$^$7$?!%(B

$B$5$F(Bgcc$B$N:n<T$KAaB.%P%0%l%]!<%H$r=q$3$&$+$H;W$C$F$$$?$N$G$9$,!$1Q8l$,(B
$B!_BLL\$J$b$s$G(B(^^;; $B$b$7$+$7$?$i4{CN$NLdBj$+$b$7$l$J$$$N$G!$$3$A$i$K(B
$B$*?R$M$7$F$+$i=P$=$&$+$H;W$C$?$7$@$$$G$9!%(B

$BLdBjE@$G$9$,!$(Blong double$B$r;HMQ$7$F!$(B

  2 * 197^2 * 1493 * 1861^2 * 2393

$B$r7W;;$9$k$H!$@53N$JCM$O!$(B

   [960412271599200122]
                    ^^
$B$J$N$G$9$,!$(BFreeBSD$B$G$O!$(B

   [960412271599200128]
                    ^^
$B$H7W;;$5$l$^$9!%$3$N8=>]$O!$(BLinux(intel)$B$*$h$S(BSolaris(sparc)$B$G$O:F8=$5(B
$B$l$^$;$s!%(B FreeBSD$B>e$N(Bgcc$B$K$N$_5/$-$^$9!%(B

$B0J2<$,=q$-$+$1$N1Q8l$N%a!<%k$G$9!%(B($B9b9;$N;~!$1Q8l$G@VE@$7$+<h$C$?;v$,(B
$B$J$$$i$7$$(B(^^;;)

--------------------------------------------------------------

I calcrate pi on two days(^^;; But My compure produce incorrect
number. Way? 

I do fine the cause.  Maybe it's gcc bug.

Example: 
2 * 197^2 * 1493 * 1861^2 * 2393 is 960412271599200122.
                                                    ^^
FreeBSD produce [960412271599200128]. It's incorrect number. 
                                 ^^
But Linux(intel) and Solaris(sparc) produce correct number.


Pick out probrame code:
---------------------------------------------------------------------
#include <stdio.h>

typedef long double REAL80;

int main()
{
  long double tmp;
  long double true_num = 960412271599200122.0L;

  printf("sizeof(long double) = %d\n\n", sizeof(REAL80));

  printf ("!! 2 * 197^2 * 1493 * 1861^2 * 2393 = 960412271599200122 !!\n\n");

  tmp = 2.0L; /* printf("%Lf\n",tmp); */
  tmp *= 197.0L; /* printf("%Lf\n",tmp); */
  tmp *= 197.0L; /*  printf("%Lf\n",tmp); */
  tmp *= 1493.0L; /* printf("%Lf\n",tmp); */
  tmp *= 1861.0L; /* printf("%Lf\n",tmp); */
  tmp *= 1861.0L; /* printf("%Lf\n",tmp); */
  tmp *= 2393.0L; /* printf("%Lf\n",tmp); */

  printf("gcc-%d.%d.* + ",__GNUC__, __GNUC_MINOR__);

#ifdef __FreeBSD__
  printf("FreeBSD2.2.1 environment: %Lf\n", tmp);
#else
  printf("Linux environment: %Lf\n", tmp);
#endif

  printf("different true number = %f\n", (double)(tmp - true_num) );

  return 0;
}
---------------------------------------------------------------------

FreeBSD 2.2.1 (PentiumPro) product: Produce incorrect number.
---------------------------------------------------------------------
%gcc -v
gcc version 2.7.2.1
%uname -a
FreeBSD koala 2.2.1-RELEASE FreeBSD 2.2.1-RELEASE #0: Mon Feb  9 02:55:31 \\
 JST 1998 root@koala:/usr/src/sys/compile/KOALA  i386
%gcc test.c
%./a.out
sizeof(long double) = 12

!! 2 * 197^2 * 1493 * 1861^2 * 2393 = 960412271599200122 !!

gcc-2.7.* + FreeBSD2.2.1 environment: 960412271599200128.000000
different true number = 6.000000
---------------------------------------------------------------------

Linux-2.0.32 (Slackware 3.1, PentiumMMX) product: No probram
---------------------------------------------------------------------
pluto588<matumoto>[1] gcc -v
Reading specs from /usr/lib/gcc-lib/i486-linux/2.7.2/specs
gcc version 2.7.2
pluto588<matumoto>[2] uname -a
Linux pluto588 2.0.32 #2 Thu Nov 27 18:24:45 JST 1997 i586
pluto588<matumoto>[3] gcc test.c
pluto588<matumoto>[4] ./a.out
sizeof(long double) = 12

!! 2 * 197^2 * 1493 * 1861^2 * 2393 = 960412271599200122 !!

gcc-2.7.* + Linux environment: 960412271599200122.000000
different true number = 0.000000
---------------------------------------------------------------------

SparcStation Ultra1 product: No probram
---------------------------------------------------------------------
pluto40<matumoto>[1] gcc -v
Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.5.1/2.7.2.3/specs
gcc version 2.7.2.3
pluto40<matumoto>[2] uname -a
SunOS pluto40 5.5.1 Generic sun4u sparc SUNW,Ultra-1
pluto40<matumoto>[3] gcc test.c
pluto40<matumoto>[4] ./a.out
sizeof(long double) = 16

!! 2 * 197^2 * 1493 * 1861^2 * 2393 = 960412271599200122 !!

gcc-2.7.* + Linux environment: 960412271599200122.000000
different true number = 0.000000
pluto40<matumoto>[5] 
---------------------------------------------------------------------

--
Ryuji Matsumoto
Kyushu Institute of Technology.(Japan)
e-mail:matumoto@pluto.ai.kyutech.ac.jp
