5

What happens if I cast a double to an int, but the value of the double is out of range?

Lets say I do something like this?

double d = double(INT_MIN) - 10000.0;
int a = (int)d;

What is the value of a? Is it undefined?

Roland Rabien
  • 8,750
  • 7
  • 50
  • 67

2 Answers2

19

Precisely. Quoting from the Standard, 4.9, "The behavior is undefined if the truncated value cannot be represented in the destination type."

David Thornley
  • 56,304
  • 9
  • 91
  • 158
4

David Thornley answered this question completely already. However to deal with this situation in your code you should consider boost's numeric_cast.

double d = double(INT_MIN) - 10000.0;
int a = boost::numeric_cast<int>(d);

This will throw an exception at runtime if d is too big for an int.

Dominic Rodger
  • 97,747
  • 36
  • 197
  • 212
iain
  • 10,798
  • 3
  • 37
  • 41