Lies of Billy Gates of Microcrap

T

Tim Prince

long said:
"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.
 
T

Tim Prince

Walter said:
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.
 
L

long double

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"
 
C

CBFalconer

long said:
.... 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.
 
V

viza

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
 
R

Rolf Magnus

CBFalconer said:
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.
 
A

Adem24

"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

*/
 
G

Gernot Frisch

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".
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,901
Latest member
Noble71S45

Latest Threads

Top