public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Sam Lantinga <slouken@devolution.com>
To: craig@jcb-sc.com
Cc: slouken@devolution.com, egcs@egcs.cygnus.com
Subject: Re: Rounding errors using doubles?
Date: Wed, 31 Mar 1999 23:46:00 -0000	[thread overview]
Message-ID: <E10O2lP-0006t2-00@roboto.devolution.com> (raw)
Message-ID: <19990331234600.R539q2bAbDN0n05MXjluQ5wNQ0LkS5btHEigyYtWDZg@z> (raw)

> >Both compilers have options to force pure 64-bit arithmetic (53-bit
> >precision) throughout (at some cost in speed): -ffloat-store on EGCS,
> >/Op on MSVC.

> Take -ffloat-store off that list: it doesn't do the above.  It affects
> only explicit *stores* to *variables*, not intermediate coputations.  egcs
> provides no way to force 64-bit FP arithmetic.  In fact, I'd be surprised
> if -ffloat-store "improved" the behavior of the (buggy) program originally
> submitted in this thread.

Interestingly enough, the original project file (MS VC++ 5.0) did have the
/Op option, and -ffloat-store didn't force 64-bit FP arithmetic.  The
following code does force 64-bit arithmetic on Pentium style CPUs:

// Initialize the FPU at 53-bit precision to mimic Windows /Op behavior
// This code doesn't parse with the G++ parser because of the "::", but
// it works fine as a C file.
void Setup_FPU(void)
{
#ifdef i386
    unsigned short flags;

    asm volatile ("fnstcw %0":"=m" (flags));
    flags &= ~0x0300;       /* Clear precision flags */
    flags |=  0x0200;       /* Set 53-bit precision */
    asm volatile ("fldcw %0"::"m" (flags));
#endif
}

If this doesn't work on other x86 CPUs, I'd like to know.
Linux saves and restores the FPU flags on context switch, so this is
safe to call in an individual program.

BTW, I am on the list. :)

	-Sam Lantinga				(slouken@devolution.com)

Lead Programmer, Loki Entertainment Software
--
Author of Simple DirectMedia Layer -
	http://www.devolution.com/~slouken/SDL/
--

             reply	other threads:[~1999-03-31 23:46 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1999-03-19  9:08 Sam Lantinga [this message]
     [not found] ` < E10O2lP-0006t2-00@roboto.devolution.com >
1999-03-19  9:43   ` craig
1999-03-31 23:46     ` craig
1999-03-31 23:46 ` Sam Lantinga
  -- strict thread matches above, loose matches on Subject: below --
1999-03-18 17:43 Ross Smith
     [not found] ` < 002d01be71aa$30d420e0$a8a11dcb@animal.ihug.co.nz >
1999-03-19  6:36   ` craig
     [not found]     ` < 19990319142042.16973.qmail@deer >
1999-03-19  6:36       ` craig
1999-03-31 23:46         ` craig
1999-03-31 23:46     ` craig
1999-03-31 23:46 ` Ross Smith
1999-03-18 16:45 Sam Lantinga
1999-03-18 16:54 ` Dima Volodin
1999-03-31 23:46   ` Dima Volodin
     [not found] ` < E10NnPU-0006Cc-00@roboto.devolution.com >
1999-03-18 16:57   ` David Edelsohn
1999-03-31 23:46     ` David Edelsohn
1999-03-31 23:46 ` Sam Lantinga
1999-03-18 15:41 Sam Lantinga
     [not found] ` < E10NmPs-0005mx-00@roboto.devolution.com >
1999-03-18 15:51   ` Sylvain Pion
1999-03-31 23:46     ` Sylvain Pion
1999-03-18 16:12   ` Joe Buck
     [not found]     ` < 199903190011.QAA11085@atrus.synopsys.com >
1999-03-18 16:25       ` Joe Buck
1999-03-31 23:46         ` Joe Buck
1999-03-31 23:46     ` Joe Buck
1999-03-18 15:54 ` Dima Volodin
1999-03-31 23:46   ` Dima Volodin
1999-03-31 23:46 ` Sam Lantinga

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=E10O2lP-0006t2-00@roboto.devolution.com \
    --to=slouken@devolution.com \
    --cc=craig@jcb-sc.com \
    --cc=egcs@egcs.cygnus.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).