Lies of Billy Gates of Microcrap

Discussion in 'C++' started by Tim Prince, Jun 28, 2008.

  1. Tim Prince

    Tim Prince Guest

    long double wrote:

    > "double
    > Type double is a floating type that is larger than or equal to type float,
    > but shorter than or equal to the size of type long double [-->1]
    >
    > long double [-->1]
    > Type long double is a floating type that is equal to type double.
    >
    > [1] The representation of long double and double is identical.
    > However, long double and double are separate types."
    >
    > "Table 3.2 Sizes of Fundamental Types
    > ...
    > float 4 bytes
    > double 8 bytes
    > long double 8 bytes"
    >


    Microsoft chose the option (permitted by standard) to make double the same
    as long double. Other compilers which rely on Microsoft library support
    (Intel ICL /Qlongdouble, or mingw gcc) implement the larger range long
    double to a limited extent, but don't have library support for long
    double. cygwin gcc is in an intermediate position, as newlib has partial
    support for long double. So these versions of wider long double fall
    short of standard compliance.
    You might argue that a reason for the standard permitting long double to
    be implemented as double is inadequate hardware support for wider data
    types on some platforms. Compilers for Intel and AMD platforms
    increasingly make SSE code their primary supported mode, due in large part
    to the potential performance advantage.
     
    Tim Prince, Jun 28, 2008
    #1
    1. Advertising

  2. Tim Prince

    Tim Prince Guest

    Walter Bright wrote:
    > Malcolm McLean wrote:
    >>
    >> "Walter Bright" <> wrote in message news
    >>> More bits of precision is useful to prevent (or at least stave off)
    >>> creeping errors from doing things like inverting large matrices or
    >>> doing finite element sums.
    >>>

    >> I know. As you say, its only a partial solution. For everyday
    >> programming, the secret is to arrange calculations so that a bit of
    >> error can be tolerated. For instance in games we recalculate all
    >> points from the original mesh values on each frame, we don't
    >> iteratively transform them.

    >
    > Sure, but, for example, algorithms for matrix inversion that correct for
    > cumulative roundoff error are far more complex and time consuming.
    >
    > In general, careful fp coding to avoid intermediate overflows and
    > roundoff error accumulation are not your average coding skills. Take a
    > look at Cody & Waite's manual, for example.
    >

    If you read the help archives for compilers, you see plenty of people
    below the skill level needed to deal with extra precision or any use of
    long double.
     
    Tim Prince, Jun 28, 2008
    #2
    1. Advertising

  3. Tim Prince

    long double Guest

    Can someone please translate this MS lie language into
    ordinary logical English language.
    I need a "long double" data type that is capable to hold
    bigger numbers than the normal "double" type can hold.
    Has MS' crappy compiler VC6 implemented this data type or not?
    What is your understanding from the citations below from the MS' 'documentation',
    and/or your own practical experience regarding this?

    "Type long double
    The long double contains 80 bits: 1 for sign, 15 for exponent,
    and 64 for mantissa. Its range is +/-1.2E4932 with at least 19 digits of precision.
    Although long double and double are separate types,
    the representation of long double and double is identical."

    "double
    Type double is a floating type that is larger than or equal to type float,
    but shorter than or equal to the size of type long double [-->1]

    long double [-->1]
    Type long double is a floating type that is equal to type double.

    [1] The representation of long double and double is identical.
    However, long double and double are separate types."

    "Table 3.2 Sizes of Fundamental Types
    ...
    float 4 bytes
    double 8 bytes
    long double 8 bytes"
     
    long double, Jun 28, 2008
    #3
  4. Tim Prince

    CBFalconer Guest

    long double wrote:
    >

    .... snip ...
    > Has MS' crappy compiler VC6 implemented this data type or not?
    > What is your understanding from the citations below from the MS'
    > 'documentation', and/or your own practical experience regarding
    > this?
    >
    > "Type long double
    > The long double contains 80 bits: 1 for sign, 15 for exponent,
    > and 64 for mantissa. Its range is +/-1.2E4932 with at least 19
    > digits of precision.

    .... snip ...
    >
    > "Table 3.2 Sizes of Fundamental Types
    > ...
    > float 4 bytes
    > double 8 bytes
    > long double 8 bytes"


    Obviously MS VC6 is intended to run on machines with CHAR_BIT ==
    80. What's the problem? :)

    Cross-post to c.l.c++ suppressed on follow-ups.

    --
    [mail]: Chuck F (cbfalconer at maineline dot net)
    [page]: <http://cbfalconer.home.att.net>
    Try the download section.
     
    CBFalconer, Jun 28, 2008
    #4
  5. Tim Prince

    viza Guest

    On Sat, 28 Jun 2008 12:34:04 -0700, Walter Bright wrote:

    > Malcolm McLean wrote:
    >>

    > Sure, but, for example, algorithms for matrix inversion that correct for
    > cumulative roundoff error are far more complex and time consuming.
    >
    > In general, careful fp coding to avoid intermediate overflows and
    > roundoff error accumulation are not your average coding skills. Take a
    > look at Cody & Waite's manual, for example.


    or

    http://www.amazon.com
    /Accuracy-Stability-Numerical-Algorithms-Nicholas/dp/0898715210
     
    viza, Jun 29, 2008
    #5
  6. Tim Prince

    Rolf Magnus Guest

    CBFalconer wrote:

    > long double wrote:
    >>

    > ... snip ...
    >> Has MS' crappy compiler VC6 implemented this data type or not?
    >> What is your understanding from the citations below from the MS'
    >> 'documentation', and/or your own practical experience regarding
    >> this?
    >>
    >> "Type long double
    >> The long double contains 80 bits: 1 for sign, 15 for exponent,
    >> and 64 for mantissa. Its range is +/-1.2E4932 with at least 19
    >> digits of precision.

    > ... snip ...
    >>
    >> "Table 3.2 Sizes of Fundamental Types
    >> ...
    >> float 4 bytes
    >> double 8 bytes
    >> long double 8 bytes"

    >
    > Obviously MS VC6 is intended to run on machines with CHAR_BIT ==
    > 80. What's the problem? :)


    I guess you mean CHAR_BIT == 10?

    > Cross-post to c.l.c++ suppressed on follow-ups.


    Why? It's just as relevant to C++ as it is to C.
     
    Rolf Magnus, Jun 29, 2008
    #6
  7. Tim Prince

    Adem24 Guest

    > "Type long double
    > The long double contains 80 bits: 1 for sign, 15 for exponent,
    > and 64 for mantissa. Its range is +/-1.2E4932 with at least 19 digits of precision.


    //--------------------------------------------------------------
    // Demonstrates the use of "long double" (80-bit) on the
    // GNU gcc compiler (here using Cygwin for the Windows platform)
    //
    // See the docs and FAQs of the Windows ports Cygwin or MinGW
    // on howto create a static or dynamic library that you can
    // link with other compilers.
    //
    // GCC, the GNU Compiler Collection homepage:
    // http://gcc.gnu.org/index.html
    //
    //--------------------------------------------------------------
    #include <stdio.h>
    #include <stdlib.h>
    #include <float.h>

    int long_double_test()
    {
    long double ld = 1.2e4931L;

    printf("ld=%Lf\n", ld);

    return 0;
    }

    int main(int argc, char* argv[])
    {
    return long_double_test();
    }


    /*
    Output:
    (a very very long number (here manually wrapped into several lines):

    ld=1199999999999999999991098870866297438190010000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000

    */
     
    Adem24, Jun 29, 2008
    #7

  8. > More bits of precision is useful to prevent (or at least stave off)
    > creeping errors from doing things like inverting large matrices or doing
    > finite element sums.
    >
    > More exponent range is not for measuring things, but to prevent (or at
    > least stave off) overflows from intermediate calculations.


    It's neccessary sometimes, I agree. But you should try to keep your code
    able to cross compile with 64bit double, too.
    It's mostly a problem of bad design/coding and bigger accuracy won't make
    things "good", just "better".


    --
    ------------------------------------
    Gernot Frisch
    http://www.glbasic.com
     
    Gernot Frisch, Jun 30, 2008
    #8
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Zamdrist
    Replies:
    3
    Views:
    417
    Zamdrist
    Feb 1, 2006
  2. John Bailo
    Replies:
    1
    Views:
    465
    Andrew Thompson
    Nov 7, 2004
  3. Replies:
    0
    Views:
    358
  4. spooky
    Replies:
    2
    Views:
    323
    spooky
    Jul 7, 2006
  5. Tim Prince

    Lies of Billy Gates of Microcrap

    Tim Prince, Jun 28, 2008, in forum: C Programming
    Replies:
    9
    Views:
    307
    Gernot Frisch
    Jun 30, 2008
Loading...

Share This Page