gpt4 book ai didi

c++ - 使用 boost::math::binomial_coefficient 对二项式系数进行整数计算,返回值为 boost::multiprecision::cpp_int?如何?

转载 作者:太空狗 更新时间:2023-10-29 21:43:33 24 4
gpt4 key购买 nike

我想将二项式系数计算为整数,最多约 numberLeaves=100, K=10 .我相信这应该可以存储在大约 128 位整数中。

因此,我想使用 boost::multiprecision::cpp_int存储结果,并使用 boost::math::binomial_coefficient<boost::multiprecision::cpp_int>计算它:

// Invalid because the template argument must be a floating-point type!
boost::multiprecision::cpp_int number_branch_combinations =
boost::math::binomial_coefficient<boost::multiprecision::cpp_int>(numberLeaves, K);

不幸的是,即使二项式系数是一个整数,上面的代码也是无效的,因为boost::math::binomial_coefficient要求返回值必须是浮点型,claiming that :

...the template argument must be a real-valued type such as float or double and not an integer type - that would overflow far too easily!

如前所述,在我的例子中,我希望二项式系数计算的结果适合大约 128 位 - 我希望它是一个整数。

因此,我考虑过boost::multiprecision::cpp_dec_float作为 boost::math::binomial_coefficient 的模板参数,然后将浮点返回值(通过舍入)转换到最接近的整数。

遗憾的是,我找不到从 boost::multiprecision::cpp_dec_float 转换的方法到 boost::multiprecision::cpp_int .执行有损转换似乎是 strictly prohibited通过 boost::multiprecision图书馆:

cpp_int             cppi(2);
cpp_dec_float_50 df(cppi); // OK, int to float
df = static_cast<cpp_dec_float_50>(cppr); // OK, explicit rational to float conversion
// However narrowing and/or implicit conversions always fail:
cppi = df; // Compiler error, conversion not allowed

现在我正在编写我自己的函数来计算二项式系数,并将值作为整数返回。

我很难相信实际上没有可能使用 boost::math::binomial_coefficient 的方法计算二项式系数并将其作为 boost::multiprecision::cpp_int 返回.

是否可以使用 boost::math::binomial_coefficient计算二项式系数并将其作为 boost::multiprecision::cpp_int 返回?

最佳答案

I find it hard to believe that there is literally no possible way to use boost::math::binomial_coefficient to calculate the binomial coefficient and return it as a boost::multiprecision::cpp_int.

为什么你认为这很难相信?

这是一个明确的设计选择,已被记录在案,在当时非常有意义。

Boost Multiprecision 仅在 1_53 中引入。我认为 binomial_coefficient 很容易比它早很多年(虽然我没有检查过)。

因此,与其表达您的厌恶,不如与 boost 邮件列表中的开发人员交谈,以建议这项新功能。 Boost 库维护者通常非常渴望与(新)库集成。

如您所知,您现在可以包装函数,进行转换。它是 faaar 理想的,但它比自己为 Boost Math 提供补丁更简单:)

关于c++ - 使用 boost::math::binomial_coefficient 对二项式系数进行整数计算,返回值为 boost::multiprecision::cpp_int?如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22685563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com