Re: long double precision
Juha Nieminen wrote:
Victor Bazarov wrote:
Markus Moll wrote:
[..]
What does MSVC++ say about sizeof(long double) vs sizeof(double)?
8 vs 8
MSVC++ has all kinds of odd settings which are standard, but
different from any other compiler. Another one is that, if I'm not
mistaken, sizeof(long) == 32 even in 64-bit platforms when compiling
a 64-bit binary. (So if you ever programmed assuming 'long' will be
64 bits in a 64-bit system, then you are for a surprise.)
Makes one wonder how you seek a file larger than 4GB,
2GB, actually. 'long' is signed, the largest value is 2^31-1. You
must be thinking 'unsigned long', but that's not what 'fseek' is
taking (as you correctly pointed out).
given that
fseek takes a long as parameter.
(Btw, *why* does it take a long as parameter? Shouldn't it take
size_t? It's not like what MSVC++ does is wrong or against the
standard. It just makes it impossible to seek large files with
standard code.)
(a) It takes 'long' because when C Library was standardised (1989)
there was no concern probably with the files larger than what 'long'
can service, and besides, as the files grow, so will 'long', right?
[Well, Microsoft told them all, didn't it?] (b) If you need to seek
in files larger than 'long' allows, use either 'fsetpos' or some OS
specific means. (c) size_t is not a very suitable thing for that,
since 'size_t' is for the sizes of objects. I would rather think
that 'ptrdiff_t' is a better choice. (d) Don't use C Library for
file I/O, use C++ Library, there you'll deal with the special type
for the position, 'std::basic_streambuf::pos_type'. And if it's
not large enough, complain to the compiler vendor.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask