今天使用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就可以了。

最新文章

  1. jquery 选择元素
  2. 修改Linux的SSH远程连接端口 技巧
  3. 烦人的win10的输入法
  4. [转]Membership三步曲之入门篇 - Membership基础示例
  5. 【Oracle】ORA-28000: the account is locked-的解决办法
  6. 处理畅捷通的T+ 12.0版,web服务无故自动停止的问题
  7. LoadRunner场景参数文件部分参数说明(我在某银行的整理)
  8. 文件写入文件分布式系统(asp.net C#)
  9. Emacs golang 配置
  10. 精通Linux的“kill”命令
  11. SQL Server Management Studio 使用作业实现数据库备份
  12. js控制TR的显示影藏
  13. JVM参数
  14. SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)
  15. vijos1057题解
  16. 永中DCS文档转换服务其它产品对比
  17. Unity发布WebGL时如何修改默认的载入进度条
  18. 带你深入理解STL之RBTree
  19. pd.read_csv() 、to_csv() 之 常用参数
  20. 初学Python——介绍一些内置方法

热门文章

  1. mysql 触发器 插入
  2. [leetcode]Surrounded Regions @ Python
  3. javascript 的面向对象特性参考
  4. 解剖android中的闹钟app 一
  5. Android -- tools
  6. JPA(五):映射关联关系------映射单向多对一的关联关系
  7. Python操作记录
  8. FireDAC中的SQLite(二)
  9. Direct2D教程VIII——几何(Geometry)对象的运算,本系列的终结篇
  10. C++ 构造与析构的执行顺序