Skip to content

Instantly share code, notes, and snippets.

@rosek86
Created May 18, 2019 05:03
Show Gist options
  • Save rosek86/962e45862d12208de81ea9f674b12c70 to your computer and use it in GitHub Desktop.
Save rosek86/962e45862d12208de81ea9f674b12c70 to your computer and use it in GitHub Desktop.
Check if double is integer in C
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
bool is_integer(double x) {
const double epsilon = 0.0001; // adjust
double fract = fabs(x - round(x));
return fract < epsilon;
}
typedef struct {
double value;
bool result;
} test_case_t;
int main(void) {
test_case_t test_cases[] = {
{ 0.8571428571, false },
{ 1.1428571429, false },
{ 1.4285714286, false },
{ 1.7142857143, false },
{ 1.9999999988, true },
{ 2, true },
{ 2.0000000022, true },
{ 2.2857142857, false },
{ 2.5714285714, false },
{ 2.8571428571, false },
{ 3.1428571429, false },
{ 3.4285714286, false },
{ 3.7142857143, false },
{ 4, true },
{ 4.2857142857, false },
{ 4.5714285714, false },
{ 4.8571428571, false },
{ 5.1428571429, false },
{ 5.4285714286, false },
{ 5.7142857143, false },
{ 6, true },
{ 6.2857142857, false },
{ 6.5714285714, false },
{ 6.8571428571, false },
{ 7.1428571429, false },
{ 7.4285714286, false },
{ 7.7142857143, false },
{ 8, true },
{ 8.2857142857, false },
{ 8.5714285714, false },
{ 8.8571428571, false },
{ 9.1428571429, false },
{ 9.4285714286, false },
{ 9.7142857143, false },
{ 10, true },
{ 10.2857142857, false },
{ 10.5714285714, false },
{ 10.8571428571, false },
{ 11.1428571429, false },
{ 11.4285714286, false },
{ 11.7142857143, false },
{ 12, true },
{ 12.2857142857, false },
{ 12.5714285714, false },
{ 12.8571428571, false },
{ 13.1428571429, false },
{ 13.4285714286, false },
{ 13.7142857143, false },
{ 14, true },
{ 14.2857142857, false },
{ 14.5714285714, false },
{ 14.8571428571, false },
{ 15.1428571429, false },
{ 15.4285714286, false },
{ 15.7142857143, false },
{ 16, true },
{ 16.2857142857, false },
{ 16.5714285714, false },
{ 16.8571428571, false },
{ 17.1428571429, false },
{ 17.4285714286, false },
{ 17.7142857143, false },
{ 18, true },
{ 18.2857142857, false },
{ 18.5714285714, false },
{ 18.8571428571, false },
{ 19.1428571429, false },
{ 19.4285714286, false },
{ 19.7142857143, false },
{ 20, true },
{ 20.2857142857, false },
{ 20.5714285714, false },
{ 20.8571428571, false },
{ 21.1428571429, false },
{ 21.4285714286, false },
{ 21.7142857143, false },
{ 22, true },
{ 22.2857142857, false },
{ 22.5714285714, false },
{ 22.8571428571, false },
{ 23.1428571429, false },
{ 23.4285714286, false },
{ 23.7142857143, false },
{ 24, true },
{ 24.2857142857, false },
{ 24.5714285714, false },
{ 24.8571428571, false },
{ 25.1428571429, false },
{ 25.4285714286, false },
};
for (size_t i = 0; i < (sizeof(test_cases) / sizeof(test_cases[0])); i++) {
assert(is_integer(test_cases[i].value) == test_cases[i].result);
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment