Skip to content

Conversation

@Delta456
Copy link
Contributor

@Delta456 Delta456 commented Jul 16, 2023

resolve #267

Description

Please describe the motivation of this pull request, and what problem was solved in this PR.

Change List

Reference

I added a static_cast<double> to make it work with negative values.


说明

此处详细说明 PR 的动机是什么、解决了什么样的问题。

变化箱单

  • 修复了 XXX 的 typo 错误
  • 增加了 XXX 相关的说明
  • 解决了关于 XXX 的描述性错误

参考文献

如果有请注明

@BaiLei27
Copy link

Do not use 'auto' for the return of template functions, but use 'double' instead

template<typename ... T>
auto average(T ... t) {
return (t + ... ) / sizeof...(t);
return static_cast<double>((t + ... )) / sizeof...(t);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

我个人建议是模仿 <cmath> 中浮点函数的额外重载,把整数类型转换为 double 而浮点类型不变。这样可以避免 long double 被转换为 double

Suggested change
return static_cast<double>((t + ... )) / sizeof...(t);
constexpr auto integer_to_double = [](auto x) {
if constexpr (std::is_integral_v<decltype(x)>)
return static_cast<double>(x);
else
return x;
};
return (integer_to_double(t) + ... ) / sizeof...(t);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

static_caste() it will explicitly change the data type of t to double

#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; } }
@Devanshu-0808
Copy link

Devanshu-0808 commented Jun 8, 2024

static_caste() it will explicitly change the data type of t to double

#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; }
template<typename ... T>
auto average(T ... t) {
return (t + ... ) / sizeof...(t);
return static_cast<double>((t + ... )) / sizeof...(t);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

static_caste() it will explicitly change the data type of t to double

#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; } }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

4 participants