Как можно (безопасно) разделить максимальное значение, в результате чего получается значение с плавающей запятой?

Я хочу рассчитать коэффициенты пересчета. Для этого я должен разделить максимальное значение, например, ushort, на максимальное значение uchar.

Я хочу сделать это динамически, передав параметр в функцию или имя типа. Затем я хочу выбрать максимальные значения и выполнить расчет.

Есть две проблемы:

  1. Как мне динамически выбрать максимальное значение?
  2. Как я могу безопасно разделить два значения?

Все значения, как известно, вписываются в диапазон двойных.

В идеале я хотел бы сделать что-то вроде:

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;
}

демонстрация

Другие вопросы по тегам