Сообщение Re[2]: Предпочтительный способ вычислений во времени компиля от 12.09.2019 14:22
Изменено 12.09.2019 15:14 rg45
Re[2]: Предпочтительный способ вычислений во времени компиля
Здравствуйте, swingus, Вы писали:
S>Но экономней всего:
S>
Только факториал пяти равен 120, а не 24 А попытка получить факториал от нуля и единицы у тебя приводит к ошибке компиляции.
Исправленная версия:
http://coliru.stacked-crooked.com/a/6c27e0cf39b312d0
Можно чуть по-другому (тест на внимательность — найдите три отличия):
http://coliru.stacked-crooked.com/a/e3d5c43f5e52b7dc
S>Но экономней всего:
Оригинальный пример | |
S>
| |
S>
Только факториал пяти равен 120, а не 24 А попытка получить факториал от нуля и единицы у тебя приводит к ошибке компиляции.
Исправленная версия:
http://coliru.stacked-crooked.com/a/6c27e0cf39b312d0
template <std::size_t... Vals>
int constexpr fact_impl(std::index_sequence<Vals...>)
{
return (1 * ... * (Vals + 1));
}
template <std::size_t Val>
int constexpr factorial() { return fact_impl(std::make_index_sequence<Val>{}); }
Можно чуть по-другому (тест на внимательность — найдите три отличия):
http://coliru.stacked-crooked.com/a/e3d5c43f5e52b7dc
template <std::size_t... Vals>
int constexpr fact_impl(std::index_sequence<0, Vals...>)
{
return (1 * ... * Vals);
}
template <std::size_t Val>
int constexpr factorial() { return fact_impl(std::make_index_sequence<Val + 1>{}); }
Re[2]: Предпочтительный способ вычислений во времени компиля
Здравствуйте, swingus, Вы писали:
S>Но экономней всего:
S>
Только факториал пяти равен 120, а не 24 А попытка получить факториал от единицы или нуля у тебя приводит к ошибке компиляции.
Исправленная версия:
http://coliru.stacked-crooked.com/a/6c27e0cf39b312d0
Можно чуть по-другому (тест на внимательность — найдите три отличия):
http://coliru.stacked-crooked.com/a/e3d5c43f5e52b7dc
S>Но экономней всего:
Оригинальный пример | |
S>
| |
S>
Только факториал пяти равен 120, а не 24 А попытка получить факториал от единицы или нуля у тебя приводит к ошибке компиляции.
Исправленная версия:
http://coliru.stacked-crooked.com/a/6c27e0cf39b312d0
template <std::size_t... Vals>
int constexpr fact_impl(std::index_sequence<Vals...>)
{
return (1 * ... * (Vals + 1));
}
template <std::size_t Val>
int constexpr factorial() { return fact_impl(std::make_index_sequence<Val>{}); }
Можно чуть по-другому (тест на внимательность — найдите три отличия):
http://coliru.stacked-crooked.com/a/e3d5c43f5e52b7dc
template <std::size_t... Vals>
int constexpr fact_impl(std::index_sequence<0, Vals...>)
{
return (1 * ... * Vals);
}
template <std::size_t Val>
int constexpr factorial() { return fact_impl(std::make_index_sequence<Val + 1>{}); }