如何从 boost::multi precision::cpp_int 转换为 cpp_dec_float<0> (而不是 cpp_dec_float_50 等)?

2023-12-25

正如在Boost 多精度库 http://www.boost.org/doc/libs/1_55_0/libs/multiprecision/doc/html/boost_multiprecision/tut/conversions.html文档,很容易从boost::multiprecision::cpp_int to a boost::multiprecision::cpp_dec_float:

// Some interconversions between number types are completely generic,
// and are always available, albeit the conversions are always explicit:

cpp_int cppi(2);
cpp_dec_float_50 df(cppi);    // OK, int to float // <-- But fails with cpp_dec_float<0>!

从 a 转换的能力cpp_int到固定宽度浮点类型(即cpp_dec_float_50)给了人们希望,即有可能从cpp_int to an 任意宽度库中的浮点类型 - 即cpp_dec_float<0>。然而,这是行不通的;在 Visual Studio 2013 中,转换失败,如以下简单示例程序所示:

#include <boost/multiprecision/number.hpp>
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/multiprecision/cpp_dec_float.hpp>

int main()
{
    boost::multiprecision::cpp_int n{ 0 };
    boost::multiprecision::cpp_dec_float<0> f{ n }; // Compile error in MSVC 2013
}

It does成功转换为cpp_dec_float_50,如预期,但如前所述,我希望转换为任意精度浮点类型:cpp_dec_float<0>.

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

template <class R, class T>
inline bool check_in_range(const T& t)
{
   // Can t fit in an R?
   if(std::numeric_limits<R>::is_specialized && std::numeric_limits<R>::is_bounded
      && (t > (std::numeric_limits<R>::max)()))
      return true;
   return false;
}

错误信息是:

错误C2784: 'enable_if::result_type,detail::表达式::result_type>,bool>::type boost::多精度::运算符 >(const boost::多精度::细节::表达式 &,常量 boost::多精度::细节::表达式 &)' : 无法推断出“const”的模板参数 boost::多精度::细节::表达式 &' 来自“const next_type”

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

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

Thanks!


我对 Boost Multi precision 没有太多经验,但在我看来,模板类cpp_dec_float<>他们称之为backend,并且您需要将其包装在number<>适配器以便将其用作算术类型。

这是我的看法:住在科里鲁 http://coliru.stacked-crooked.com/a/d445521ea60cb4cb

#include <boost/multiprecision/number.hpp>
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <iostream>

namespace mp = boost::multiprecision;

int main()
{
    using Int = mp::cpp_int;

    // let's think of a nice large number
    Int n = 1;
    for (Int f = 42; f>0; --f)
        n *= f;

    std::cout << n << "\n\n"; // print it for vanity 

    // let's convert it to cpp_dec_float
    // and... do something with it
    using Dec = mp::number<mp::cpp_dec_float<0> >;
    std::cout << n.convert_to<Dec>();
}

Output:

1405006117752879898543142606244511569936384000000000

1.40501e+51

If convert_to<>是允许的,那么显式转换构造函数也将起作用,我期望:

Dec decfloat(n);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 boost::multi precision::cpp_int 转换为 cpp_dec_float<0> (而不是 cpp_dec_float_50 等)? 的相关文章

随机推荐

  • PST 到 CSV 文件转换

    有谁知道通过命令行将 pst 转换为 csv 文件的好工具 您可以假设计算机上安装了 Outlook 吗 如果是这样 我相信它可以使用 OLE 或类似的东西进行后台脚本编写 我已经使用 Ruby 通过 Excel 完成了文件转换 这是一个P
  • 有没有办法将 SharedPreferences 存储到 SD 卡上?

    我编写了一个具有多个硬编码设置 例如 fontSize 或 targetDirectory 的应用程序 我希望能够偶尔更改这些类型的设置 SharedPreferences 似乎是解决此问题的一种方法 但我想共享此应用程序和设置 并且我的手
  • 使用参数从终端运行 Jython 脚本

    我想从命令行调用 Jython 脚本 例如 Applications Fiji app Contents MacOS ImageJ macosx headless little jython script py 我了解 Python 以及
  • GtkTreeView 由于排序而导致插入/更新性能损失

    在将许多行插入 GTK 树视图 使用 PyGTK 或修改许多行时 我遇到了性能问题 问题是模型似乎在每次更改 插入 修改 后都会被重新使用 这会导致 GUI 挂起数秒 通过注释使模型不排序model set sort column id S
  • 从 CLLocation 数组创建 GPX 文件

    我的应用程序需要使用应用程序在设备内共享 CLLocations 路由 数组 在此之前我没有使用 GPX 的经验 GPX 是最好的格式吗 如何从给定的此类 CLLocations 数组创建 GPX 文件 Objective C 中有标准的
  • 生成的 PDF 中自动换行(使用 jsPDF)?

    我正在做的是使用 jsPDF 创建我生成的图表的 PDF 但是 我不确定如何包装标题 通过使用 text 函数添加 标题的长度因图表而异 目前 我的标题已经从页面上消失了 任何帮助 将不胜感激 这是我到目前为止的代码 var doc new
  • 从 Lambda 中的 S3 通知事件获取非 ASCII 文件名

    The keyAWS S3 通知事件中表示文件名的字段已进行 URL 转义 当文件名包含空格或非 ASCII 字符时 这一点很明显 例如 我已将以下文件名上传到 S3 my file txt 收到的通知如下 Records s3 objec
  • 使用volley时如何保持进度条状态?

    当我将 AysncTask 与片段回调一起使用时 维护进度条状态很容易 但我应该如何用 volley 实现它 我不能使用 AsyncTask 因为它已经过时了 而且 volley 更好更快 任何帮助或提示将不胜感激 我正在使用谷歌的齐射来发
  • 使用空格而不是制表符进行缩进的性能影响

    我目前使用软制表符 即空格 来缩进 Ruby 代码 如果我使用硬制表符 在解释代码时会提高性能吗 我认为读取 1 个制表符比解析 4 个空格字符 尽管可以忽略不计 要快 您是否了解源代码解释所涉及的所有阶段 只有第一个 词法分析 必须处理空
  • spring data elasticsearch继承查询没有结果

    我在继承和 ElasticsearchRepository 方面遇到一些麻烦 我的代码 简短版本 实体 public abstract class father Id protected String identifier construc
  • Highchart / Highstock 如何设置单个 ohlc 或蜡烛的颜色?

    I have set up a highstock ohlc https www highcharts com stock demo ohlc with angular 2 But can not set the up and down c
  • 使用 wkhtmltopdf 或任何其他免费工具的 C# html 到 pdf 转换器 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在 C 中将 html 转换为 pdf 的完美工具是什么 我通过 stackoverflow com 找到了 wkhtmltopdf 但它
  • 更改亮度滤镜

    我尝试使用 jQuery 更改页面上某些图像的亮度过滤器 css 属性 但在控制台中收到以下错误 解析 过滤器 值时出错 声明被删除 这是我正在使用的代码 function changeBrightness myImg css filter
  • 从 Pandas Dataframe 写入格式化的二进制文件

    我已经看到了一些将 Python 中的格式化二进制文件读取到 Pandas 的方法 也就是说 我使用的代码使用 NumPy fromfile 进行读取 该文件使用 dtype 给定的结构进行格式化 import numpy as np im
  • 根据向量提供的变量名称和权重创建平均变量

    假设我想在给定的数据框中基于两个向量创建一个均值变量 一个指定要使用的变量的名称 另一个指定这些变量应进入均值变量的权重 vars lt c a b c d weights lt c 0 5 0 7 0 8 0 2 df lt data f
  • 理解 RXJS 可观察输出的问题

    我对 rxjs 相当陌生 正在尝试学习 我正在读这篇媒体文章 https medium com javascript in plain english reactive programming in javascript 8373201a6
  • 如何在 C# 中重写 WinForm UserControl 中的方法和事件?

    我在 C WinForms 中有一个名为的自定义控件BaseControl我在那里有一个叫做Selected 我想要举办一个活动SelectedChanged和虚方法OnSelecteChanged在基本控件中 它们的行为方式应该与我们在C
  • O、Ω 和 θ 之间有什么区别?

    我正在学习算法分析 我无法理解 O 和 之间的区别 它们的定义方式如下 f n O g n means c g n 是一个 上界f n 因此存在 一些常数c这样f n 是 总是 c g n 对于足够大的n IE n n0对于一些常数n0 f
  • 反序列化混合类型的 JSON 数组

    我在使用 DataContractJsonSerializer 类反序列化混合类型的 JSON 数组时遇到问题 我花了很多时间寻找解决方案但无济于事 所以我想我应该继续在这里询问 基本上 我得到了如下所示的 JSON 字符串 我想让数组反序
  • 如何从 boost::multi precision::cpp_int 转换为 cpp_dec_float<0> (而不是 cpp_dec_float_50 等)?

    正如在Boost 多精度库 http www boost org doc libs 1 55 0 libs multiprecision doc html boost multiprecision tut conversions html文