Как можно (безопасно) разделить максимальное значение, в результате чего получается значение с плавающей запятой?
Я хочу рассчитать коэффициенты пересчета. Для этого я должен разделить максимальное значение, например, ushort, на максимальное значение uchar.
Я хочу сделать это динамически, передав параметр в функцию или имя типа. Затем я хочу выбрать максимальные значения и выполнить расчет.
Есть две проблемы:
- Как мне динамически выбрать максимальное значение?
- Как я могу безопасно разделить два значения?
Все значения, как известно, вписываются в диапазон двойных.
В идеале я хотел бы сделать что-то вроде:
double x = numeric_limits<T>::max / numeric_limits<T2>::max;
Однако это не правильно / невозможно.
1 ответ
Решение
Ваша предложенная идея должна работать:
#include <iostream>
#include <limits>
template <typename T, typename T2>
double get_ratio()
{
return static_cast<double>(std::numeric_limits<T>::max()) / std::numeric_limits<T2>::max();
}
int main()
{
auto ratio = get_ratio<unsigned short, unsigned char>();
std::cout << ratio << '\n';
return 0;
}