Comments (2)
The issue you're facing is due to integer promotion in C++. When you perform operations on values of different types, C++ promotes them to a common type before performing the operation. In your case, the values you're passing to the average function include both positive and negative integers, which leads to integer promotion.
The problem is that the sizeof...(t) part of your code is evaluated as an unsigned integer (size_t), which causes all the values to be promoted to unsigned integers for the division operation. This is why you're getting an unexpected result.
To fix this issue, you can explicitly cast the result of the division to the desired type (e.g., double) to ensure that the division is performed with the correct type. Here's an updated version of your code:
#include <iostream>
template<typename ... T>
auto average(T ... t) {
return static_cast<double>((t + ...)) / sizeof...(t);
}
int main() {
std::cout << average(1, 2, 3, 4, 5, -6, -7, -8, -9, -10) << std::endl;
}
By casting the result of (t + ...), you ensure that the division is performed using a floating-point type, which can handle both positive and negative values correctly. This will give you the expected average, including negative values.
from modern-cpp-tutorial.
I have made a PR for fixing this bug. See #268
from modern-cpp-tutorial.
Related Issues (20)
- typo of memory order HOT 1
- 漏字 HOT 1
- Book: Incorrect tables header spacing on Regex chapter
- runtime indexing example question HOT 2
- 中文版pdf第一页license的英文名不对
- 2.2 变量及其初始化 中,if初始化的设计并不是来源于Go或者其他语言,而是Bjarne Stroustrup自己的设计 HOT 2
- 中文版第三章部分加粗显示问题
- C - Wikipedia HOT 1
- Possible text error in Chapter 7
- Question about Chapter 3 Generic Lambda HOT 1
- about std::bind HOT 1
- 语句有些繁琐,可否简化表达 HOT 1
- 第6章的习题设置不合理 HOT 1
- 网页端渲染存在问题 HOT 1
- 关于普通重载和override的一个区别 HOT 1
- 第二章 尾返回类型推导 “我们已经提过 auto 不能用于函数形参进行类型推导” HOT 2
- 第八章内容 HOT 1
- 网页加载速度 HOT 1
- P43 || 43页 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from modern-cpp-tutorial.