|
|
|
#1 |
|
Messages: n/a
Hébergeur: |
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. |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
Walter Bright wrote:
> Malcolm McLean wrote: >> >> "Walter Bright" <walter@digitalmars-nospamm.com> 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 archives for compilers, you see plenty of people below the skill level needed to deal with extra precision or any use of long double. |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
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" |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
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. |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
"long double" <long-double@long-double.com.invalid> wrote in message news: > > 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? > Why do you need numbers larger than 1.798e+308 ? What are you measuring? -- Free games and programming goodies. http://www.personal.leeds.ac.uk/~bgy1mm |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
Tim Prince wrote:
> 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. Digital Mars C and C++ implements 80 bit long doubles with full library support. --- Walter Bright Digital Mars http://www.digitalmars.com C, C++, D programming language compilers |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
Malcolm McLean wrote:
> Why do you need numbers larger than > 1.798e+308 ? > What are you measuring? 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. --- Walter Bright Digital Mars http://www.digitalmars.com C, C++, D programming language compilers |
|
|
|
#8 |
|
Messages: n/a
Hébergeur: |
"Walter Bright" <walter@digitalmars-nospamm.com> wrote in message news > Malcolm McLean wrote: >> Why do you need numbers larger than >> 1.798e+308 ? >> What are you measuring? > > 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. -- Free games and programming goodies. http://www.personal.leeds.ac.uk/~bgy1mm |
|
![]() |
| Outils de la discussion | |
|
|