问题标签 [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.
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()
?
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
)?
(请注意,在我的程序中,任何时候都只实例化一个浮点数实例,并且不经常更新,所以我可以让这个实例占用大量内存并且需要很长时间才能真正支持巨大的数字。)
谢谢!
c++ - Force cpp_dec_float to round down
I am using .str(n, std::ios_base::scientific)
to print ccp_dec_float
s.
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?
c++ - 将 boost::multiprecision::mpq_rational 舍入到最接近的整数
将 boost::multiprecision::mpq_rational 舍入到最接近的整数的最佳方法是什么?
一个丑陋的解决方案是:
有更好的想法吗?
c++ - boost::multiprecision:如何将 mpz_int 变量转换为 gmp_int?
我通过将 a 转换为
然后将实例转换为 ampz_int
来将 a 转换为。有更简单的方法吗?谢谢gmp_int
mpz_int
mpz_class
mpz_class
gmp_int
c++ - 内联使用静态数据初始化器
我在cpp_dec_float
源文件中找到了这一部分:
我想使用其中一些值,例如zero
, one
, two
,half
而不是声明全局const
变量。
是否可以内联使用这些值?如果是这样,怎么做?
示例:
c++ - 可以 std::vector>(N).data() 安全地被重新解释为 fftwq_complex*?
我真的没想到下面的例子可以工作,但确实可以(g++ 4.6.4,带有--std=c++0x):
两个备注:
- 目标是能够在相同数据上同时使用
fftw
和blitz::Array
操作,而无需复制它们,同时能够使用泛型函数,例如sin()
也可用于具有四精度的复杂变量 - -part
blitz
工作正常,这是预期的。但(对我来说)令我惊讶的是,这fftwq_complex*
部分也能正常工作。 - 这
fftw::allocator
是一个简单的替代品,std::allocator
用于fftwq_malloc
确保正确的 simd 对齐,但这对这个问题并不重要,所以我把它省略了(至少我认为这对这个问题并不重要)
我的问题是:我踩到的冰有多薄?
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
.
fortran - 如何安装mpfun90?
我正在尝试用 Fortran 编写一个多精度程序。我已经用 Fortran 编写了一个双精度程序。任何人都可以帮我将其转换为多精度。我发现了 D. Baily 多精度库( http://crd-legacy.lbl.gov/~dhbailey/mpdist/ for mpfun90),但我无法安装它。如何在 Ubuntu 上安装 MPFUN90?有人可以帮我(一步一步)吗?我使用 gfortran 编译器。