src/fps/ode/lib.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "../exp/lib.hpp" | ||
| 4 | #include "../int/lib.hpp" | ||
| 5 | #include "../inv/lib.hpp" | ||
| 6 | |||
| 7 | namespace tifa_libs { | ||
| 8 | |||
| 9 | template <class poly, class G, class DG> | ||
| 10 | requires requires(poly f, size_t n, G g, DG dg) { | ||
| 11 | { g(f, n) } -> std::same_as<poly>; | ||
| 12 | { dg(f, n) } -> std::same_as<poly>; | ||
| 13 | } | ||
| 14 | 33 | CEXP auto ode_fps(G&& g, DG&& dg, TPN poly::val_t a, u32 n) NE { | |
| 15 | 33 | poly f{a}; | |
| 16 |
6/6auto tifa_libs::ode_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<1012924417ul> > > >, main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<1012924417ul> > > > const&, unsigned int)#1}&, main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<1012924417ul> > > > const&, unsigned int)#2}&>(main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<1012924417ul> > > > const&, unsigned int)#1}&, main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<1012924417ul> > > > const&, unsigned int)#2}&, tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<1012924417ul> > > >::val_t, unsigned int):
✓ Branch 1 taken 137 times.
✓ Branch 2 taken 11 times.
auto tifa_libs::ode_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<1012924417ul> > > >, main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<1012924417ul> > > > const&, unsigned int)#1}&, main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<1012924417ul> > > > const&, unsigned int)#2}&>(main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<1012924417ul> > > > const&, unsigned int)#1}&, main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<1012924417ul> > > > const&, unsigned int)#2}&, tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<1012924417ul> > > >::val_t, unsigned int):
✓ Branch 1 taken 137 times.
✓ Branch 2 taken 11 times.
auto tifa_libs::ode_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<1012924417ul> > > >, main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<1012924417ul> > > > const&, unsigned int)#1}&, main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<1012924417ul> > > > const&, unsigned int)#2}&>(main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<1012924417ul> > > > const&, unsigned int)#1}&, main::{lambda(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<1012924417ul> > > > const&, unsigned int)#2}&, tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<1012924417ul> > > >::val_t, unsigned int):
✓ Branch 1 taken 137 times.
✓ Branch 2 taken 11 times.
|
444 | for (u32 i = 1; i < n; i *= 2) { |
| 17 | 411 | auto r = exp_fps(int_fps(-dg(f, i * 2))), h = int_fps(((g(f, i * 2) - (dg(f, i * 2) * f).pre(i * 2)) * r).pre(i * 2)); | |
| 18 | 411 | f = ((h + a) * inv_fps(r, i * 2)).pre(i * 2); | |
| 19 | } | ||
| 20 | 33 | return f.pre(n); | |
| 21 | 33 | } | |
| 22 | |||
| 23 | } // namespace tifa_libs | ||
| 24 |