LINE Solver (C++)
Templated C++ port of the LINE queueing solver
Loading...
Searching...
No Matches
moment_binomial_from_factorial.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2012-2026, QORE Lab, Imperial College London
3 * All rights reserved.
4 */
5#ifndef LINE_API_MOMENT_MOMENT_BINOMIAL_FROM_FACTORIAL_H
6#define LINE_API_MOMENT_MOMENT_BINOMIAL_FROM_FACTORIAL_H
7
8/**
9 * @file
10 * @ingroup api_moment
11 * Binomial moments from falling-factorial moments.
12 *
13 * Templated port of matlab/src/api/moment/moment_binomial_from_factorial.m. Every operation is integer
14 * or rational, so the exact instantiation returns the transform with no
15 * rounding at all. That matters more here than almost anywhere else in the API:
16 * the alternating binomial sums of the moment conversions cancel
17 * catastrophically in double arithmetic once the order grows.
18 */
19
20#include <vector>
21
22#include "line/num/number.h"
23#include "line/util/error.h"
24#include "line/util/matrix.h"
26
27namespace line {
28namespace moment {
29
30/** b_i = f_i / i!. */
31template <class T>
32std::vector<T> moment_binomial_from_factorial(const std::vector<T>& f) {
33 std::vector<T> b(f.size());
34 for (std::size_t i = 0; i < f.size(); ++i)
35 b[i] = f[i] / num_factorial<T>(static_cast<unsigned>(i));
36 return b;
37}
38
39} // namespace moment
40} // namespace line
41
42#endif
The exception types the port throws.
Dense matrix and non-owning view.
std::vector< T > moment_binomial_from_factorial(const std::vector< T > &f)
b_i = f_i / i!
T num_factorial(unsigned n)
Factorial as a value of T.
Definition number.h:184
Number-type abstraction for the templated API port.
Population-vector enumeration and combinatorics.