From owner-FreeBSD-users-jp@jp.freebsd.org  Tue Feb 10 01:31:48 1998
Received: by jaz.jp.freebsd.org (8.8.8+3.0Wbeta7/8.7.3) id BAA27255
	Tue, 10 Feb 1998 01:31:48 +0900 (JST)
Received: by jaz.jp.freebsd.org (8.8.8+3.0Wbeta7/8.7.3) with ESMTP id BAA27243
	for <FreeBSD-users-jp@jp.freebsd.org>; Tue, 10 Feb 1998 01:31:46 +0900 (JST)
Received: from r_matu.pluto.ai.kyutech.ac.jp ([131.206.3.227])
	by pluto.ai.kyutech.ac.jp (8.8.7/3.6Wbeta6-Pluto-Server-Sep/06/1997) with SMTP id BAA24524;
	Tue, 10 Feb 1998 01:31:43 +0900 (JST)
Message-Id: <199802091620.AA00020@r_matu.pluto.ai.kyutech.ac.jp>
Date: Tue, 10 Feb 1998 01:20:20 +0900
To: FreeBSD-users-jp@jp.freebsd.org
From: Ryuji Matsumoto <matumoto@pluto.ai.kyutech.ac.jp>
MIME-Version: 1.0
X-Mailer: AL-Mail32 Version 1.01
Content-Type: text/plain; charset=iso-2022-jp
Reply-To: FreeBSD-users-jp@jp.freebsd.org
Precedence: bulk
X-Distribute: distribute [version 2.1 (Alpha) patchlevel=24]
X-Sequence: FreeBSD-users-jp 24379
Subject: [FreeBSD-users-jp 24379] Re: gcc bug
Errors-To: owner-FreeBSD-users-jp@jp.freebsd.org
Sender: owner-FreeBSD-users-jp@jp.freebsd.org

$B>>85N4Fs!wCNG=!&6e9)Bg$G$9!#(B

FreeBSD$B>e$N(Bgcc$B$G(Blong double$B$r;H$C$?$,!"B>$N(BOS$B$G7W;;$7$?CM$H7W;;7k2L$,0[$J$k(B
$B7o$K$D$$$F!"Bt;3$N%U%)%m!<$"$j$,$H$&$4$6$$$^$7$?!#(B

$B7k6I$N=j!"(Bgcc$B$NLdBj$G$O$J$/!"(BFreeBSD$B8GM-$NLdBj$@$C$?$h$&$G$9!#!J2<<j$J1Q8l(B
$B%a!<%k$r=q$+$J$/$F$9$s$G$h$+$C$?$G$9(B(^^;;)


$B%W%m%0%i%`$r<!$N$h$&$K=$@5$9$k;v$K$h$j@5$7$$CM$,7W;;=PMh$k$h$&$K$J$j$^$7$?!#(B

$B$7$+$7!"(BFreeBSD$B$N(Bprintf()$B$O!"(Blong double (%Lf)$B$KBP1~$7$F$$$J$$$h$&$G$9$M!#(B

----------------- test3.c ---------------------------------------------------
#include <stdio.h>

#ifdef __FreeBSD__
#include <floatingpoint.h>
#endif

typedef long double REAL80;

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

#ifdef __FreeBSD__
  fpsetprec(FP_PE); /* 64bit */
#endif

  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;
}

----------------- test3.c ---------------------------------------------------

--------------------------------------------------------------------
%gcc test3.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 = 0.000000
%
--------------------------------------------------------------------

--
$B>>85N4Fs(B  matumoto@pluto.ai.kyutech.ac.jp
