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,586
  • 7
  • 46
  • 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
  • 55,402
  • 8
  • 89
  • 155
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
  • 94,357
  • 33
  • 195
  • 210
iain
  • 10,689
  • 3
  • 34
  • 40