今天使用std::accumulate模板函数的时候出现了一个错误,特此记录一下。

#include <iostream>
#include <numeric> int main()
{
int LevelColRow[][3] =
{
1, 2, 1,
2, 4, 2,
3, 8, 4,
4, 16, 8,
5, 32, 16,
6, 64, 32,
7, 128, 64,
8, 256, 128,
9, 512, 256,
10, 1024, 512,
11, 2048, 1024,
12, 4096, 2048,
13, 8192, 4096,
14, 16384, 8192,
15, 32768, 16384,
16, 65536, 32768 /*,
17, 131072, 65536/*,
18, 262144, 131072,
19, 524288, 262144*/
};
double xx = std::accumulate( std::begin( LevelColRow ), std::end( LevelColRow ),
0, [] (double val, int lcr[3]) { return(val + double(lcr[1]) * double(lcr[2]) ); } );
double xx2 = 0;
for ( auto x : LevelColRow )
{
xx2 += double(x[1]) * double(x[2]);
}
std::cout << (int64_t) xx << std::endl;
std::cout << (int64_t) xx2 << std::endl;
std::cout << "Hello, world!\n";
}

这个代码是用于求这个行列组总共有多少个格子的,但是算出的结果总是为负数。

经过排查,当格子数大于2^31个时候,就出现问题了,这就应该是计算的结果实际是int32的。

查看accumulate(http://en.cppreference.com/w/cpp/algorithm/accumulate)的声明如下:

template< class InputIt, class T >
T accumulate( InputIt first, InputIt last, T init ); template< class InputIt, class T, class BinaryOperation >
T accumulate( InputIt first, InputIt last, T init,
BinaryOperation op );

那么原因就很简单了,因为我在使用的时候,第三个参数写的是0(默认为int),改为0.0就可以了。

std::accumulate使用的一个小细节的更多相关文章

  1. C++在使用Qt中SLOT宏须要注意的一个小细节

    大家都知道C++虚函数的机制,对于基类定义为虚函数的地方,子类假设覆写,在基类指针或者引用来指向子类的时候会实现动态绑定. 但假设指针去调用非虚函数,这个时候会调用C++的静态绑定,去推断当前的指针是 ...

  2. C++在使用Qt中SLOT宏需要注意的一个小细节

    大家都知道C++虚函数的机制,对于基类定义为虚函数的地方,子类如果覆写,在基类指针或者引用来指向子类的时候会实现动态绑定. 但如果指针去调用非虚函数,这个时候会调用C++的静态绑定,去判断当前的指针是 ...

  3. [20171120]bash使用here documents的一个小细节.txt

    [20171120]bash使用here documents的一个小细节.txt --//昨天看bash文档,,发现一些小细节,做一个记录,就是EOF加引号的问题. command <<' ...

  4. 文本域textarea的一个小细节

    文本域代码在编写时,最好写在一行上,就像: 如果没写在一行上,如: 那么就会在后续生成的页面上输入的时候就会产生一段空白无法删除: 这是写文本框的时候的一个小细节

  5. 关于 JavaScript 中一个小细节问题 (在控制台中直接 {Name:'王尼玛',Age:20} 对象报错问题)

    在 Chrome 浏览器,大家可能遇到这样一个小问题. 随便输入一个 Object 对象  ,比如 {Name:'王尼玛',Age:20} ,将会报错.之前,也从来没去考虑过到底是为啥原因. 今天,刚 ...

  6. 关于base64的一个小细节

    Base64出现\r\n的问题 前段时间遇到这么一个小问题: 后台接口返回一个图片的base64串,同事拿着这个字符串,找了一个在线图片和Base64字符串互转的工具网站,想将字符串转成图片,死活转不 ...

  7. 曲演杂坛--使用TRY CATCH应该注意的一个小细节

    群里一个朋友遇到一个TRY CATCH的小问题,测试后发现是自己从来没有考虑的情况,写篇blog加深下印象 --============================================ ...

  8. 使用Spring和SpringMVC管理bean时要注意的一个小细节

    最近一直在做毕业设计...用到了Shiro和SpringMVC..用过shiro的朋友都知道shiro需要自己去写Realm,然后把Realm注入到SecurityManager中.而Security ...

  9. List<Integer>.remove()的一个小细节

    不废话,先上代码: ArrayList<Integer> col = new ArrayList<Integer>(); System.out.println("In ...

随机推荐

  1. PyCharm 配置远程python解释器

    配置过程 本机环境 操作系统:win10 IDE:Pycharm 远程服务器 操作系统:ubuntu14.04 配置了ssh,可以使用ssh进行远程登陆 配置Deployment 首先,在pychar ...

  2. BZOJ 1093 最大半连通子图 题解

    1093: [ZJOI2007]最大半连通子图 Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 2767  Solved: 1095[Submit][S ...

  3. 【转】asm.js 和 Emscripten 入门教程

      Web 技术突飞猛进,但是有一个领域一直无法突破 ---- 游戏. 游戏的性能要求非常高,一些大型游戏连 PC 跑起来都很吃力,更不要提在浏览器的沙盒模型里跑了!但是,尽管很困难,许多开发者始终没 ...

  4. 菜鸟学步之 爆破AspriseOCR 4.0

    最近写一个小程序要用到OCR控件,在网上查了一下,据说AspriseOCR 4.0效果不错.试用了一下发现的确还行,不过就是要注册,试用版本每次都会弹出讨厌的对话框来.网上看到有一篇“新人报道–处女破 ...

  5. 超酷实用的jQuery焦点图赏析及源码

    焦点图应用在现代网页中使用十分广泛,有注重简单小巧的,也有注重华丽美观的,大部分jQuery焦点图都可以滑动和切换图片,并且在切换图片时产生不同的动画特效.今天我们要分享一些超酷而且实用的jQuery ...

  6. DICOM-RT:放疗领域中的各种影像

    背景: DICOM-RT系列博文着眼于DICOM3.0中对放疗领域的补充标准,即DICOM-RT.为了方便兴许对DICOM-RT中相关IOD.SOP概念的理解,专栏最近做了放疗相关知识点的普及. PS ...

  7. nginx高效学习方法

    nginx高效学习方法 nginx做为一个高性能的web服务器,相对于apache等服务器来说它的代码量并不是非常庞大,反而非常精简.看过nginx源码的人都知道,nginx将“一切皆为模块”和“所有 ...

  8. 转 :scikit-learn的GBDT工具进行特征选取。

    http://blog.csdn.net/w5310335/article/details/48972587 使用GBDT选取特征 2015-03-31 本文介绍如何使用scikit-learn的GB ...

  9. Docker创建MySQL容器环境两部曲

    1:下载MySQL镜像 需要执行以下命令,确保主机或者VM联网,从官网下载mysql的最新镜像(镜像版本以官网为主) docker  pull  mysql 下载成功后执行 docker image ...

  10. (转)Unity导出Android在高通骁龙800以上CPU概率性崩溃解决方法研究

    Android上的奇葩问题真的是太多了,开始测试反馈说游戏在某些Android手机上随机crash,后来经过详细的测试发现随机闪退的手机都是搭载了高通骁龙800以上的CPU.然后连上真机当crash的 ...