#include <stdint.h>
#include <limits.h>
#include <iostream>
template <typename T1, typename T2> inline size_t const find_numerical_errors(T2 const min, T2 const max)
{
size_t error_count = 0;
for (volatile T2 i = min; i < max; ++i)
if ((T2)((T1)i) != i)
++error_count;
return error_count;
}
int main()
{
std::cout << "float/int32_t errors: " << find_numerical_errors<float, int32_t>(INT_MIN, INT_MAX) << std::endl;
std::cout << "float/uint32_t errors: " << find_numerical_errors<float, uint32_t>(0, UINT_MAX) << std::endl;
std::cout << "double/int32_t errors: " << find_numerical_errors<double, int32_t>(INT_MIN, INT_MAX) << std::endl;
std::cout << "double/uint32_t errors: " << find_numerical_errors<double, uint32_t>(0, UINT_MAX) << std::endl;
char wait;
std::cin >> wait;
return 0;
}
float/int32_t errors: 4143972351
float/uint32_t errors: 4211081215
double/int32_t errors: 0
double/uint32_t errors: 0