编译时(constexpr)浮点模?

2024-03-18

考虑以下函数,该函数在编译时根据参数类型计算积分或浮点模:

template<typename T>
constexpr T modulo(const T x, const T y)
{
    return (std::is_floating_point<T>::value) ? (x < T() ? T(-1) : T(1))*((x < T() ? -x : x)-static_cast<long long int>((x/y < T() ? -x/y : x/y))*(y < T() ? -y : y))
    : (static_cast<typename std::conditional<std::is_floating_point<T>::value, int, T>::type>(x)
      %static_cast<typename std::conditional<std::is_floating_point<T>::value, int, T>::type>(y));
}

本体这个功能可以改进吗? (我需要有一个用于整数和浮点类型的函数)。


这是清理此问题的一种方法:

#include <type_traits>
#include <cmath>

template <typename T>  //     integral?       floating point?
bool remainder_impl(T a, T b, std::true_type, std::false_type) constexpr
{
    return a % b;  // or whatever
}

template <typename T>  //     integral?        floating point?
bool remainder_impl(T a, T b, std::false_type, std::true_type) constexpr
{
    return std::fmod(a, b); // or substitute your own expression
}

template <typename T>
bool remainder(T a, T b) constexpr
{
    return remainder_impl<T>(a, b,
             std::is_integral<T>(), std::is_floating_point<T>());
}

如果您尝试在非算术类型上调用此函数,您将收到编译器错误。

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

编译时(constexpr)浮点模? 的相关文章

随机推荐

  • Rust:“无法移出‘self’,因为它是借用的”错误

    我正在尝试编写一个递归方法 将一个项目添加到树中并返回与该项目对应的树节点 enum BstNode Node int BstNode BstNode Leaf impl BstNode fn insert lt a gt a mut se
  • VB6杀死定时器

    我使用 VB6 进行编程 因为我们使用的是遗留代码和硬件 外部电子设备 我的程序是围绕计时器构建的 我将在操作系统编程中使用任务 计时器一直运行 直到其工作完成 设置一个标志并启动另一个计时器 我想要一个监督计时器来控制其他计时器当计时器没
  • 如何在 Boost.Asio 中使用零拷贝 sendmsg/Receive [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在使用Boost Asio 我想通过使用零拷贝发送消息 接收来改进我的系统 我可以在 Boost Asio 中使用零拷贝 send
  • c# 打开文件,路径以%userprofile%开头

    我有一个简单的问题 我在用户目录中有一个文件的路径 如下所示 USERPROFILE AppData Local MyProg settings file 当我尝试将其作为文件打开时 ostream new FileStream fileN
  • 带确认对话框的 MVC3 Actionlink

    我可以显示一条确认消息吗ActionLink 我需要使用 JavaScript 吗 没有它可以吗 你能为我举一些例子吗 谢谢 I want to make a confirmation message appear before the l
  • nanomsg (nng) 中的多个发布者和订阅者

    如何使用 TCP 传输设置多个发布者和订阅者 我怀疑您没有自动创建网格 总线 因此 每个发布者都需要一个唯一的 IP 绑定点 对吧 他们只是让订阅者通过单个套接字连接到每个发布者 这在以下文章中进行了讨论 https www freelis
  • 可拖动的工具栏

    如何像 Eclipse 那样使用 JFace SWT 制作可拖动 可停靠的工具栏 您能否发布一个 ApplicationWindow 的简单示例或链接如何制作它的良好来源 Thanks SWT 有一个名为 CoolBar 的组件 您可以使用
  • WordPress 页面中的 JavaScript

    我有这段代码 但是当我在 html 中调用它时 它在 WordPress 中没有执行任何操作 我该如何解决这个问题 gt 谢谢
  • PascalScript 是否与 Delphi XE5 兼容以创建 Android/iOS/Windows 应用程序?

    我想创建一个基于 JSON 数据绘制简单表单的应用程序 我需要一个脚本来对此进行情报处理 RemObjects 的 Pascal Script 可以解决这个问题吗 是否兼容为 Android iOS 和 Windows 生成具有相同源代码的
  • filterContentForSearchText:scope: 方法从哪里来?

    最近 我注意到filterContentForSearchText scope 出现在有关如何实现搜索栏的多个教程中 不过 我查阅了两者的参考资料UISearchDisplayDelegate and UISearchBarDelegate
  • Keras提前停止回调错误,val_loss指标不可用

    我正在训练 Keras Tensorflow 后端 Python 在 MacBook 上 并且在 fit generator 函数的早期停止回调中遇到错误 错误如下 RuntimeWarning Early stopping conditi
  • 如何使用 python3 在 aws 上使用过滤表达式作为嵌套映射属性?

    我一直在尝试扫描 DynamoDB 以检查名为 可交付成果 的嵌套地图属性中的特定值 但是 使用带有过滤表达式的扫描会导致空结果 import boto3 result dynamo client boto3 client dynamodb
  • Numpy 确实以不同方式对待 float('nan') 和 float - 转换为 None

    我想从普通数组创建一个 Numpy 数组并转换nan价值观None 但成功取决于天气 第一个值是 正常 浮点数 或者float nan 这是我的代码 从初始数组开始 print a array d 3 2345 nan 2 0 3 2 1
  • iOS SDK v2 的 Amazon S3 视频上传问题

    尊敬的开发人员 我遇到了与 Amazon S3 视频上传相关的问题 我正在使用 iOS SDK V2 来安排 iOS 客户端和 Amazon 之间的交互 我已经阅读了亚马逊开发人员提供的所有文档并调查了手册 并且出现了一些未记录的问题 我将
  • nginx 和 Perl:FastCGI 与反向代理 (PSGI/Starman)

    如今运行 Perl Web 应用程序的一个非常流行的选择似乎是在 nginx Web 服务器后面将请求代理到 FastCGI 守护程序或启用 PSGI 的 Web 服务器 例如 Starman 关于为什么人们会这样做有很多疑问 例如为什么将
  • 如何使用带有多个子节点的sql将表数据转换为xml格式

    我有一个如下表结构 SELECT EmpID EmpName DeptName BirthDate FROM dbo Employees 我想将此表数据转换为 XML 最终输出如下
  • 两个数组的和

    练习说 创建一个函数 参数为两个 int 数组 k 是它们的大小 该函数应该返回另一个数组 大小 k 其中每个元素都是同一位置的两个数组的总和 这就是我写的 但是它崩溃了 我必须用指针来做吗 include
  • Backbone.js 路由可选参数

    Backbone js 路由中是否可以有可选参数 例如这个 routes search query searchIndex 代替 routes search searchIndex search query searchIndex 从 Ba
  • 如何在 Visual Studio 2010 for Linux 中编译

    是否可以使用 Visual Studio 2010 不一定是 MSVC 编译器 在 Windows 上开发 C C 并获得可以上传到 Linux 计算机 并运行它 的二进制文件 我检查的可能性是使用 MinGW 或类似的东西来让 Windo
  • 编译时(constexpr)浮点模?

    考虑以下函数 该函数在编译时根据参数类型计算积分或浮点模 template