Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Lies of Billy Gates of Microcrap

Reply
Thread Tools

Lies of Billy Gates of Microcrap

 
 
Tim Prince
Guest
Posts: n/a
 
      06-28-2008
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.
 
Reply With Quote
 
 
 
 
Tim Prince
Guest
Posts: n/a
 
      06-28-2008
Walter Bright wrote:
> Malcolm McLean wrote:
>>
>> "Walter Bright" <(E-Mail Removed)> 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.
 
Reply With Quote
 
 
 
 
long double
Guest
Posts: n/a
 
      06-28-2008
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"

 
Reply With Quote
 
CBFalconer
Guest
Posts: n/a
 
      06-28-2008
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.

 
Reply With Quote
 
viza
Guest
Posts: n/a
 
      06-29-2008
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
 
Reply With Quote
 
Rolf Magnus
Guest
Posts: n/a
 
      06-29-2008
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.

 
Reply With Quote
 
Adem24
Guest
Posts: n/a
 
      06-29-2008
> "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=11999999999999999999910988708662974381900100000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000
00000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000.000000

*/

 
Reply With Quote
 
Gernot Frisch
Guest
Posts: n/a
 
      06-30-2008

> 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

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Asynchronous Logic Gates and Analog Logic Gates Jyoti Ballabh Software 3 11-26-2009 06:48 PM
lies, lies, and more lies noauth Computer Support 9 03-09-2009 12:59 AM
Lies of Billy Gates of Microcrap Tim Prince C Programming 9 06-30-2008 07:46 AM
whoa, big billy gates pr0n? Dave - Dave.net.nz NZ Computing 17 02-07-2005 06:57 AM
Lies, D^mned Lies, and Cisco's WebVPN. NS Cisco 2 02-22-2004 11:51 PM



Advertisments