X-Spam-Check-By: sourceware.org Message-ID: <46D5A79E.C09EF7CE@dessent.net> Date: Wed, 29 Aug 2007 10:06:38 -0700 From: Brian Dessent X-Mailer: Mozilla 4.79 [en] (Windows NT 5.0; U) MIME-Version: 1.0 To: newlib AT sourceware DOT org CC: cygwin AT cygwin DOT com Subject: Re: 1.5.24: sin() bug References: <20070829153331 DOT GA95558 AT tetsuo DOT karasik DOT eu DOT org> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Reply-To: cygwin AT cygwin DOT com 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 Dmitry Karasik wrote: > #include > #include > int main( int argc, char ** argv) > { > double g = (double) 3.1415926535897900074; > printf("sin(%.10g)=%.10g\n", g, sin(g)); > } > > output is : > > sin(3.141592654)=3.231089149e-15 > > whereas all other sin() implementation I could find ( freebsd, linux, msvc) > report this: > > sin(3.141592654)=3.231085104e-015 > > the difference is in 7th digit, and is significant for double precision. This appears to be due to an approximation in __kernel_sin in which if |x| < 2**-27 the approximation sin(x) ~ x is used. . This code seems to be completely untouched since the original import into CVS in 2000, so I'm guessing it's a very old implementation. I'm not sure how we'd go about fixing this other than to look for a more sophisticated implementation and contribute it to newlib. In any case this is more of a newlib issue than a Cygwin issue as we are just a consumer of this code, so followups should go to the newlib list. Brian -- 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/