std::inner_product与std::accumulate初始值设置踩坑

news2025/1/9 1:11:52

std::inner_product函数可以用于计算两个序列的内积。在这个函数中,我们需要传递四个参数:两个源序列的起始迭代器、一个初始值和一个二元函数对象。

std::inner_product函数将对两个源序列中的每个元素进行乘法运算,并将结果累加到初始值中,最终返回累加结果。

以下是一个示例代码,演示了如何使用std::inner_product函数计算两个序列的内积:

#include <iostream>
#include <vector>
#include <numeric>

double calc_confi_interval(double rtt_interval_ratio) {
    return 1.96 * rtt_interval_ratio / std::sqrt(2);
}

int main() {
    std::vector<double> rtt_interval_ratios = {0.5, 0.6, 0.7, 0.8, 0.9};
    std::vector<double> rtt_interval_weights = {0.1, 0.2, 0.3, 0.4, 0.5};
    std::vector<double> rtt_interval_confidences(rtt_interval_ratios.size());
    int N_intervals = 3;
    std::transform(rtt_interval_ratios.begin(), rtt_interval_ratios.begin() + N_intervals,
                   rtt_interval_confidences.begin(), calc_confi_interval);
    double res = std::inner_product(rtt_interval_confidences.begin(), rtt_interval_confidences.begin() + N_intervals,
                                    rtt_interval_weights.begin(), 0.0);
    std::cout << res << std::endl;
    return 0;
}

在这个示例代码中,我们定义了一个函数calc_confi_interval,用于计算置信区间。我们还定义了两个序列rtt_interval_ratiosrtt_interval_weights,分别表示RTT间隔比率和权重。我们使用std::transform函数将rtt_interval_ratios序列中的前N_intervals个元素转换为置信区间,并将结果存储到rtt_interval_confidences序列中。最后,我们使用std::inner_product函数计算rtt_interval_confidences序列和rtt_interval_weights序列的内积,并将结果存储到res变量中。

通过使用std::inner_product函数,我们可以方便地计算两个序列的内积。在二元函数对象中,我们可以根据需要定义不同的运算规则,以便满足不同的计算需求。

std::inner_product函数的初始值对于结果类型有影响,初始值的类型必须与源序列和二元函数对象的返回类型相同,否则计算可能会有精度丢失。

以下是一个示例代码,演示了初始值类型与结果类型不匹配时会导致结果出错:

int main() {
    std::vector<int> v1 = {1, 2, 3};
    std::vector<double> v2 = {1.1, 2.2, 3.3};
    auto res = std::inner_product(v1.begin(), v1.end(), v2.begin(), 0);
    std::cout << res << std::endl;
    return 0;
}

在这里插入图片描述
初始值改为0.0

int main() {
    std::vector<int> v1 = {1, 2, 3};
    std::vector<double> v2 = {1.1, 2.2, 3.3};
    auto res = std::inner_product(v1.begin(), v1.end(), v2.begin(), 0.0);
    std::cout << res << std::endl;
    return 0;
}

在这里插入图片描述
计算结果也正确了。
与之类似的例如std::accumulate

int main() {
    std::vector<double> v = {1.1, 2.2, 3.3, 4.4, 5.5};
    auto sum = std::accumulate(v.begin(), v.end(), 0);
    std::cout << "sum = " << sum << std::endl;
    return 0;
}

在这里插入图片描述
计算结果为15,明显丢失精度了。
初始值改为0.0

int main() {
    std::vector<double> v = {1.1, 2.2, 3.3, 4.4, 5.5};
    auto sum = std::accumulate(v.begin(), v.end(), 0.0);
    std::cout << "sum = " << sum << std::endl;
    return 0;
}

在这里插入图片描述
结果为16.5,正确。
其他也有一些函数有初始值的坑,这里简单提及一下即可:
std::transform_reduce函数:在计算序列的变换和缩减时,初始值的类型应该与变换和缩减函数的返回类型相同,否则可能会导致类型转换错误或精度损失。

std::partial_sum函数:在计算序列的部分和时,初始值的类型应该与序列的元素类型相同,否则可能会导致类型转换错误或精度损失。

std::reduce函数:在计算序列的缩减时,初始值的类型应该与缩减函数的返回类型相同,否则可能会导致类型转换错误或精度损失。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/416885.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA基于XDMA实现PCIE X4通信方案 提供工程源码和QT上位机程序和技术支持

目录1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案5、vivado工程详解6、驱动安装7、QT上位机软件8、上板调试验证9、福利&#xff1a;工程代码的获取1、前言 PCIE&#xff08;PCI Express&#xff09;采用了目前业内流行的点对点串行连接&#xff0c;比起 PCI …

桥接设计模式解读

目录 问题引进 手机操作问题 传统方案解决手机操作问题 传统方案解决手机操作问题分析 桥接模式(Bridge)概述 基本介绍 原理类图 主要角色 桥接模式解决手机操作问题 桥接模式的注意事项和细节 常见的应用场景 问题引进 手机操作问题 现在对不同手机类型的不同品牌…

Mybatis(七)Mybatis的日志体系

在介绍Mybatis日志实现前&#xff0c;我们先了解下java的日志体系以及日志框架的发展&#xff0c;目前比较常用的日志框架有下面几个&#xff1a; 而JCL和SLF4J属于日志接口&#xff08;没有日志具体实现&#xff09;&#xff0c;提供统一的日志操作规范&#xff0c;而日志的实…

Halo博客建站实战以及问题汇总

目录 简介 特性 快速开始 安装步骤 环境准备 Docker-compose方式部署 问题汇总 mac端无法访问页面 页面登录提示账号密码错误 重装注意点 资料 官方文档 简介 Halo 强大易用的开源建站工具 特性 代码开源 我们的所有代码开源在 GitHub 上且处于积极维护状态&…

stata数据处理

stata数据处理–潘登同学的stata笔记 文章目录stata数据处理--潘登同学的stata笔记数据导入、导出使表格第一行成为变量标注(label)数据合并横向与纵向合并一对多与多对一横向合并缺失值处理查看缺失值替换缺失值缺失值填充离群值处理取对数的方法截尾处理、缩尾处理分组统计列…

银行数字化转型导师坚鹏:银行数字化转型痛点、路径与对策

银行数字化转型痛点、路径与对策课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不知道银行数字化转型&#xff1f; 不清楚数字化转型对银行发展有什么影响&#xff1f; 不知道数字化转型对银行有什么机遇&#xff1f; 学员收获: 学习银行数字化转型的发展现状与成…

2021四川省icpc省赛H题 Nihongo wa Muzukashii Desu 日本語は難しいです!

日本語は難しいです&#xff01; それは難しくないと思うだけど 传送门 一些吐槽 这题好像恶心了不少学弟啊 其实只要读懂了题就很好做, 对于我这种日语高考生来说确实是有点犯规了不过当时我写的时候不能用翻译一看题面一大串英文就被我pass掉, 后面看到一大堆人过了我才去写…

迅为RK3568开发平台人工智能人脸识别全国产解决方案赋能NVR

人脸识别服务&#xff0c;能够在图像中快速检测人脸、分析人脸关键点信息、获取人脸属性、实现人脸的精确比对和检索。可应用于身份验证、电子考勤、客流分析等场景人脸检测、比对、搜索&#xff0c;人脸库管理等。 为什么使用它呢&#xff1f; 维持公众聚集场所的秩序 在餐厅…

Apache的配置与运用

1. web虚拟主机的构建 虚拟Web主机指的是在同一台服务器中运行多个Web站点&#xff0c;其中每一个站点实际上并不独立占用整个服务器&#xff0c;因此被称为“虚拟”Web 主机。通过虚拟 Web 主机服务可以充分利用服务器的硬件资源&#xff0c;从而大大降低网站构建及运行成本。…

2.3.2 单链表的插入结点操作

--单链表示意图 一、按位序插入&#xff08;带头结点&#xff09; ①表头插入 注意点 1.i1&#xff0c;while循环不执行 2.时间复杂度为O&#xff08;1&#xff09; 3.p&#xff01;NULL表示指针p有指向结点 4.头结点为第0个结点 5.pL表示指针p和L指向位置相同&#xff0…

ORB_SLAM3_优化方法 Pose优化

PoseOptimization PoseOptimization主要的作用是利用重投影优化单帧的位姿,主要用在Tracking的几种跟踪模式TrackWithMotionModel、TrackReferenceKeyFrame、 TrackLocalMap、Relocalization中 输入 优化变量观测帧的Pose帧的MapPoint帧的KeyPoint初始化 //创建优化器 g2o…

4.Java逻辑控制语句

Java逻辑控制语句 在实际生活中&#xff0c;我们的生活不是一成不变的&#xff0c;很多时候需要我们去选择&#xff0c;大到人生的十字路口&#xff0c;小到今天晚上吃什么&#xff0c;选择无处不在。小的选择决定了我们一件小事的走向&#xff0c;大的选择可能会改变我们人生…

大模型“云上经济”之权力游戏

文丨谭婧光阴者百代之过客。世人皆过客&#xff0c;软件亦如此。人工智能已有新旧之分。网友戏称&#xff0c;新人工智能是ChatGPT&#xff0c;旧人工智能是“之前那些”。历史在重演。云计算在美国问世的时候&#xff0c;否定论调居多。一个常见的否定论调是「做生意不用上云」…

vite+vue3使用UEditorPlus ,后端PHP

vitevue3使用UEditorPlus什么是UEditorPlus功能亮点前端安装安装vue-ueditor-wrap3.x下载 UEditorPlus在main.js注册组件v-model 绑定数据后端配置效果百度富文本编辑器是目前所有编辑器中功能最丰富的&#xff0c;但长时间不进行维护了。之前写了一篇使用UEditor的教程&#x…

回调函数含义查询云记debug调试

回调函数 同步回调函数 回调函数通常就是当父函数执行完后&#xff0c;再执行通过传参进来的函数&#xff0c;当然也可以不传参&#xff0c;直接在父函数内部调用回调函数 注&#xff1a;立即执行回调&#xff0c;执行完回调代码才会继续往下执行 function a(callback) {a…

力扣:两数之和(哈希表)

1、两数之和 1、问题描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。…

如何利用超级电容设计简单的不间断电源

如何利用超级电容设计简单的不间断电源 在许多应用中&#xff0c;电源电压无论在什么情况下都持续可用是很重要的。要确保这一点有时并不容易。一种新概念可以为设计极其紧凑的不间断电源提供一种优化解决方案。 问题: 在电源关键型应用中&#xff0c;如何更轻松地获得持续、…

【Android平板编程】远程Ubuntu服务器code-server编程写代码

文章目录前言1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址5.结语前言 本次教程将在 Ubuntu 服务器环境下安装 code-server &#xff0c;并使用 Android 安卓平板远程 Ubuntu 服务&#xff0c;进行远程编程开…

Python pandas和numpy用法参考(转)

以下是转载&#xff1a;Python pandas用法 - 简书介绍 在Python中&#xff0c;pandas是基于NumPy数组构建的&#xff0c;使数据预处理、清洗、分析工作变得更快更简单。pandas是专门为处理表格和混杂数据设计的&#xff0c;而NumPy更适合处...https://www.jianshu.com/p/840ba1…

为什么你这么累,销量还不如那些轻松工作的同行?

管理混乱 忙碌却不见成效 在工业品行业做了10多年的小张&#xff0c;最近向我吐槽&#xff1a;每天忙得团团转&#xff0c;结果销售业绩还不如那些整天轻松工作的同行。几番沟通下来&#xff0c;发现小张每天要做这么多的工作&#xff0c;不忙才怪&#xff01; 管理员工&#x…