如何从 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 等)? 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • 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文