printing double in binary

B

bauran

In Thinking in C++ by Bruce eckel, there is a program given to print a
double value
in binary.(Chapter 3, page no. 189)

int main(int argc, char* argv[])
{
if(argc != 2)
{
cout << "Must provide a number" << endl;
exit(1);
}
double d = atof(argv[1]);
unsigned char* cp = reinterpret_cast<unsigned char*>(&d);
for(int i = sizeof(double); i > 0 ; i -= 2)
{
printBinary(cp[i-1]);
printBinary(cp);
}
}

assume printbinary() prints (const unsigned char) in binary i.e. 8
bits. Moreover I haven't provided header files to shorten code. Please
assume proper header files and namespaces are included.

Here while printing cp when i=8(assuming double is of 8 bytes),
wouldn't it be undefined behaviour?
I mean this code doesn't work as it doesn't print cp[0].
Bruce Eckel is a very renowned writer. How can he do this type of
mistake?
 
J

James Kanze

In Thinking in C++ by Bruce eckel, there is a program given to
print a double value in binary.(Chapter 3, page no. 189)
int main(int argc, char* argv[])
{
if(argc != 2)
{
cout << "Must provide a number" << endl;
exit(1);
}
double d = atof(argv[1]);
unsigned char* cp = reinterpret_cast<unsigned char*>(&d);
for(int i = sizeof(double); i > 0 ; i -= 2)
{
printBinary(cp[i-1]);
printBinary(cp);
}
}

assume printbinary() prints (const unsigned char) in binary
i.e. 8 bits. Moreover I haven't provided header files to
shorten code. Please assume proper header files and namespaces
are included.
Here while printing cp when i=8(assuming double is of 8
bytes), wouldn't it be undefined behaviour?


Maybe. If sizeof double is 8, it's undefined behavior.

I'm not too sure what this code is supposed to do. Printing a
hexadecimal dump of objects is pretty standard, and usually done
with something like:

template<typename T>
void
dump( std::eek:stream& dest, T const& obj )
{
IOSave state( dest );
dest.setf( std::hex, std::base_field);
dest.fill( '0' );
unsigned char const* p = reinterpret_cast<unsigned char const
*>( &obj );
for ( int i = 0; i != sizeof(T); ++ i) {
if ( i != 0 ) {
dest << ' ';
}
dest << std::setw(2) << p[ i ];
}
}
I mean this code doesn't work as it doesn't print cp[0].
Bruce Eckel is a very renowned writer. How can he do this type
of mistake?

I've yet to meet a human being who didn't make mistakes.
 

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

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top