任意精度的多项式求解
Polynomial solving with arbitrary precision
我们一直在使用GSL来求解多项式。然而,我们希望使用任意精度来求解多项式。我查阅了GMP和Boost多精度库,然而,我找不到任何浮点系数多项式求解的例程。
-
是否存在任何免费和开源的库,用于求解任意精度或非常高精度(小数后>200位)的多项式?
-
是否可以使用GSL多项式求解程序,将数据类型更改为GMP任意精度?
-
使用GMP任意精度的数据类型,使用标准算法之一编写多项式求解器会更容易吗?
如果不清楚,请随时发表评论。
如果你知道一些求解多项式方程的算法(你会在很多教科书中找到这些算法),你可以调整并编码它以使用GMP。
由于GMP有一个C++类接口,具有通常外观的operator +
。。。等等,你可以复制并通过一些现有的C代码,然后将其调整为GMP。
-
MPSolve提供了一个使用多精度求解多项式的库。内部使用GMP。
可以观察到以下情况:
- 可以用整数、有理数和浮点任意精度进行计算
- 多项式的系数和各种其他选项通过文件作为输入给出。可以对原始代码进行装配,以便从自己的程序中直接调用函数
- 解决方案可以以各种格式报告,如指数、仅实数等
- 该求解器已经在几个标准多项式测试用例中进行了验证并进行了检查
- 解算器内部使用随机数,该随机数通过Linux机器上的
/dev/random
进行种子设定。这会导致解算器在后续运行中速度较慢的问题,因为在未来运行开始之前生成的熵不够。这可以通过用标准的伪随机生成器代替它来绕过 - 尝试将解算器集成为一个库。然而,会出现严重的分段故障,难以调试。因此,求解器是通过调用其可执行文件来使用的。注意:这只是根据我的经验,希望能以更好的方式完成
- 一个新的C++版本正在开发中,有望解决这些问题
- 将GSL多项式求解器分叉为使用GMP数据类型是乏味的。如果编写了解算器(见第3条),这将更容易,代码也将更易于控制和理解
- 正如答案中所建议的,可以使用GMP和MPFR多精度库,并且可以使用标准多项式求解技术(如Jenkins-Traub算法或基于QR的技术)编写多项式求解器
Boost C++库提供了使用GMP和MPFR的包装器,使用起来可能非常方便。
Arb库具有使用任意精度和区间算术求解实数和复数多项式的例程。
相关文章:
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 正在将csv文件读取为双精度矢量
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 如何在C++中的同一函数中使用字符串和双精度
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- c++模板来表示多项式
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 如何打印boost多精度128位无符号整数
- 检查是否以特定精度给出双精度
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- C 字符串返回字符串的整数/双精度/长整型值
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 如何使双精度值的 C++ 和 C# 中的结果相同
- 使用浮点数和双精度数的非常小数字的数学
- 使用 Xcode 将双精度存储在数组C++中
- 为什么输出精度没有正确舍入?
- 任意精度的多项式求解