X-Recipient: archive-cygwin AT delorie DOT com X-Spam-Check-By: sourceware.org X-SBRS: 3.6 X-IronPort-AV: E=Sophos;i="4.31,304,1215414000"; d="scan'208";a="44759190" From: Richard Stanton To: "cygwin AT cygwin DOT com" Date: Mon, 4 Aug 2008 07:29:14 -0700 Subject: Re: cygwin gcc: Different numerical results in thread vs in main() Message-ID: <40C7B1BFC291ED4E9D10436D07736A33127AB73CD1@EXMAIL7.haas.uc.berkeley.edu> Accept-Language: en-US Content-Language: en-US acceptlanguage: en-US Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id m74EU6Jd016882 Thanks for the helpful information, David. Oddly, -ffloat-store doesn't seem to make any difference: [c:\projects\threads]gcc -ffloat-store -o thread1 thread1.c -lpthread [c:\projects\threads]thread1 Main: t/1+t = 0.0005609048868329022342546 Thread 0: t/1+t = 0.0005609048868329021258344 Thread 1: t/1+t = 0.0005609048868329021258344 Thread 2: t/1+t = 0.0005609048868329021258344 Thread 3: t/1+t = 0.0005609048868329021258344 -----Original Message----- From: Billinghurst, David (RTATECH) [mailto:David DOT Billinghurst AT riotinto DOT com] Sent: Sunday, August 03, 2008 10:16 PM To: Richard Stanton Subject: RE: cygwin gcc: Different numerical results in thread vs in main() Try compiling with -ffloat-store then report back. google for "float-store excess precision gcc" to understand why this may help. I don't recommend -ffloat-store as a fix, but it can help diagnose the problem. David > -----Original Message----- > From: cygwin-owner AT cygwin DOT com > [mailto:cygwin-owner AT cygwin DOT com] On Behalf Of Richard Stanton > Sent: Monday, 4 August 2008 15:03 > To: cygwin AT cygwin DOT com > Subject: cygwin gcc: Different numerical results in thread vs in > main() > > The following program performs exactly the same calculation 5 times, > once inside main(), and again in 4 thread functions. > Though the calculations are identical, the results are not. > When I compile and run the same program on my Mac, all the results are > identical. By the way, this is using the latest gcc 3.4.4. > > Richard Stanton > > ------------------ > > [c:\projects\threads]thread1 > Main: t/1+t = 0.0005609048868329022342546 > Thread 0: t/1+t = 0.0005609048868329021258344 > Thread 1: t/1+t = 0.0005609048868329021258344 > Thread 2: t/1+t = 0.0005609048868329021258344 > Thread 3: t/1+t = 0.0005609048868329021258344 > > > #include > #include > > #define NUM_THREADS 4 > > double t = 0.0005612196776927068104374; > > void * thread_function (void *arg) > { > int i; > int id = *((int *)arg); > > printf("Thread %d: t/1+t = %30.25lf\n", id, t/(1.0+t)); > > return NULL; > } > > > int main() > { > int i; > int arg[NUM_THREADS] = {0,1,2,3}; > pthread_t thread[NUM_THREADS]; > pthread_attr_t attr; > > printf("Main: t/1+t = %30.25lf\n", t/(1.0+t)); > > /* initialize and set the thread attributes */ > pthread_attr_init( &attr ); > pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_JOINABLE ); > > /* creating threads */ > for ( i=0; i if ( pthread_create( &thread[i], &attr, thread_function, > (void *)&arg[i] )) { > fprintf(stderr,"Creating thread %d failed!",i); > return 1; > } > } > > /* joining threads (== waiting for them to exit) */ > for ( i=0; i if ( pthread_join ( thread[i], NULL ) ) { > fprintf(stderr,"Joing thread %d failed!",i); > return 1; > } > } > > return 0; > } -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/