问题标签 [multiprecision]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1311 浏览

c++ - 以科学计数法打印 cpp_dec_float,不带尾随零

我正在使用cpp_dec_float任意精度,这很棒,但我无法弄清楚如何打印所有有效数字。

例如,使用此代码进行设置

如果我只是打印

结果是7.071068e-01,所以就出来了。

如果我破产

我明白了7.0710678118654752440084436210484903928483593768847403658833986900000000000000000000000000000000000000e-01。我很高兴没有失去精度,但它不是很保守。

有没有办法在不损失现有工具的任何精度的情况下删除尾随零?如果不是,如何从结果字符串中删除尾随零?

如果可以使用现有工具来满足我的意图,那么如何cpp_dec_float以科学计数法输出而不会丢失精度并将尾随零删除到字符串中?我只能找到流示例

更接近

感谢 mockinterface,我离得更近了。

我已将代码更改为:

具有潜在的无限长度;但是,这是打印的:

这很接近但看起来很奇怪。在模拟界面中如此亲切地向我指出,我发现了这些行

这向我表明它应该考虑所有有效数字,由于长度不受限制,基本上输出输入的内容。

我检查了 的来源cpp_dec_float_total_digits10但我无法确定它到底是什么;虽然,我确实找到了似乎定义它的代码部分。

是否可以确定有效位数并将其用作 的第一个参数boost::multiprecision::cpp_dec_float::str()

0 投票
1 回答
3752 浏览

c++ - 如何从 boost::multiprecision::cpp_int 转换为 cpp_dec_float<0> (而不是转换为 cpp_dec_float_50 等)?

正如Boost Multiprecision 库文档中所述,从 a 转换为 a 很boost::multiprecision::cpp_int简单boost::multiprecision::cpp_dec_float

从 a 转换cpp_int为固定宽度浮点类型(即 a cpp_dec_float_50)的能力让人希望可以在库中从 a 转换cpp_int任意宽度的浮点类型 - 即 a cpp_dec_float<0>。但是,这不起作用;我在 Visual Studio 2013 中的转换失败,如以下简单示例程序所示:

正如预期的那样,它确实成功转换为cpp_dec_float_50,但如前所述,我希望转换为任意精度的浮点类型:cpp_dec_float<0>.

错误出现在文件中内部 Boost Multiprecision 代码的以下代码片段中<boost/multiprecision/detail/default_ops.hpp>

错误信息是:

错误 C2784: 'enable_if::result_type,detail::expression::result_type>,bool>::type boost::multiprecision::operator >(const boost::multiprecision::detail::expression &,const boost::multiprecision ::detail::expression &)' : 无法从 'const next_type' 推导出 'const boost::multiprecision::detail::expression &' 的模板参数

是否可以将 a 转换boost::multiprecision::cpp_int为 a boost::multiprecision::cpp_dec_float<0>(而不是转换为具有固定小数精度的浮点类型,如cpp_dec_float_50)?

(请注意,在我的程序中,任何时候都只实例化一个浮点数实例,并且不经常更新,所以我可以让这个实例占用大量内存并且需要很长时间才能真正支持巨大的数字。)

谢谢!

0 投票
2 回答
1066 浏览

c++ - Force cpp_dec_float to round down

I am using .str(n, std::ios_base::scientific) to print ccp_dec_floats.

I've noticed that it rounds up.

I am using cpp_dec_float for accounting, so I need to round downward. How can this be done?

0 投票
1 回答
499 浏览

c++ - 将 boost::multiprecision::mpq_rational 舍入到最接近的整数

将 boost::multiprecision::mpq_rational 舍入到最接近的整数的最佳方法是什么?

一个丑陋的解决方案是:

有更好的想法吗?

0 投票
2 回答
853 浏览

c++ - boost::multiprecision:如何将 mpz_int 变量转换为 gmp_int?

我通过将 a 转换为 然后将实例转换为 ampz_int来将 a 转换为。有更简单的方法吗?谢谢gmp_intmpz_intmpz_classmpz_classgmp_int

0 投票
1 回答
69 浏览

c++ - 内联使用静态数据初始化器

我在cpp_dec_float源文件中找到了这一部分:

我想使用其中一些值,例如zero, one, two,half而不是声明全局const变量。

是否可以内联使用这些值?如果是这样,怎么做?

示例

0 投票
1 回答
509 浏览

c++ - 可以 std::vector>(N).data() 安全地被重新解释为 fftwq_complex*?

我真的没想到下面的例子可以工作,但确实可以(g++ 4.6.4,带有--std=c++0x):

两个备注:

  • 目标是能够在相同数据上同时使用fftwblitz::Array操作,而无需复制它们,同时能够使用泛型函数,例如sin()也可用于具有四精度的复杂变量
  • -partblitz工作正常,这是预期的。但(对我来说)令我惊讶的是,这fftwq_complex*部分也能正常工作。
  • fftw::allocator是一个简单的替代品,std::allocator用于fftwq_malloc确保正确的 simd 对齐,但这对这个问题并不重要,所以我把它省略了(至少我认为这对这个问题并不重要)

我的问题是:我踩到的冰有多薄?

0 投票
0 回答
127 浏览

c++ - 为什么 Boost.Multiprecision 不使用尽可能大的字长?

我注意到 Boost.Multiprecion 库的 cpp_int 后端在 64 位架构上使用 32 位无符号整数作为单词(肢体)。使用 64 位字的要求是编译器中本机 128 位整数的可用性(这可能是一个线索)。这是为什么?

更多关于“线索”的信息。limb_type被定义为detail::largest_unsigned_type<32>::type文件中没有本机 128 位整数支持的编译器boost/multiprecision/cpp_int/cpp_int_config.hpp。还有一种类型叫做double_limb_type.

0 投票
1 回答
177 浏览

fortran - 如何安装mpfun90?

我正在尝试用 Fortran 编写一个多精度程序。我已经用 Fortran 编写了一个双精度程序。任何人都可以帮我将其转换为多精度。我发现了 D. Baily 多精度库( http://crd-legacy.lbl.gov/~dhbailey/mpdist/ for mpfun90),但我无法安装它。如何在 Ubuntu 上安装 MPFUN90?有人可以帮我(一步一步)吗?我使用 gfortran 编译器。

0 投票
1 回答
112 浏览

floating-point - 多精度浮点`scipy.misc.comb`

我正在使用mpmath编写一个适合计算极小概率的二项式 beta 函数。

我需要的大部分功能已经包含在 mpmath 中或者很容易重写。然而,可悲的是,事实scipy.misc.comb并非如此。我尝试查看源代码,但它似乎基于从我无法找到其代码的文件中导入的某些binom函数。

在不使用 for/while 循环计算阶乘的情况下,如何重写 scipy comb 函数(或编写我自己的函数)?