float to int with overflow (last update: 2013-11-18, created: 2013-11-18) back to the list ↑

#include <stdio.h>

int
main(void) {
  float f = 1.5f;
  int i, n;

  for(i = 0; i < 50; i++, f *= 2.0f) {
    n = 0;
    n = (int)f; // float to int is UB if overflow
    printf("%f, %i\n", f, n);
  }

  return 0;
}


Results (boundary lines only):

x86

402653184.000000, 402653184
805306368.000000, 805306368
1610612736.000000, 1610612736
3221225472.000000, -2147483648
6442450944.000000, -2147483648
12884901888.000000, -2147483648

ARM

402653184.000000, 402653184
805306368.000000, 805306368
1610612736.000000, 1610612736
3221225472.000000, 2147483647
6442450944.000000, 2147483647
12884901888.000000, 2147483647


If you tested this on other architectures, let me know! (gynvael@coldwind.pl)

【 design & art by Xa / Gynvael Coldwind 】 【 logo font (birdman regular) by utopiafonts / Dale Harris 】