std::sqrt(std::valarray)
来自cppreference.com
定义于头文件 <valarray>
|
||
template< class T > valarray<T> sqrt( const valarray<T>& va ); |
||
对 va
中每个元素计算元素值的平方根。
参数
va | - | 要应用操作到的值数组 |
返回值
含有 va
中值的平方根的值数组。
注解
用无限定函数 (sqrt) 进行计算。若该函数不可用,则因参数依赖查找使用 std::sqrt 。
函数能实现为拥有不同于 std::valarray 的返回类型。此情况下,替换类型拥有下列属性:
- 提供 std::valarray 的所有 const 成员函数。
- 能从替换类型构造 std::valarray 、 std::slice_array 、 std::gslice_array 、 std::mask_array 和 std::indirect_array 。
- 所有接受一个 const std::valarray& 类型参数的函数,除了 begin() 和 end() (C++11 起)也应该接受替换类型。
- 所有接受二个 const std::valarray& 类型参数的函数都应该接受 const std::valarray& 和替换类型的每种组合。
- 返回类型添加不多于二层嵌套在最深层嵌套的参数类型上的模板。
可能的实现
template<class T> valarray<T> sqrt(const valarray<T>& va) { valarray<T> other = va; for (T &i : other) { i = sqrt(i); } return other; } |
示例
寻找多个二次方程的实根。
运行此代码
#include <cstddef> #include <valarray> #include <iostream> int main() { std::valarray<double> a(1, 8); std::valarray<double> b{1, 2, 3, 4, 5, 6, 7, 8}; std::valarray<double> c = -b; // LWG3074 前字面量亦必须拥有 T 类型(此情况下为 double ) std::valarray<double> d = std::sqrt(b * b - 4.0 * a * c); std::valarray<double> x1 = (-b - d) / (2.0 * a); std::valarray<double> x2 = (-b + d) / (2.0 * a); std::cout << "quadratic equation root 1, root 2" << "\n"; for (std::size_t i = 0; i < a.size(); ++i) { std::cout << a[i] << "x\u00B2 + " << b[i] << "x + " << c[i] << " = 0 "; std::cout << std::fixed << x1[i] << ", " << x2[i] << std::defaultfloat << "\n"; } }
输出:
quadratic equation root 1, root 2 1x² + 1x + -1 = 0 -1.618034, 0.618034 1x² + 2x + -2 = 0 -2.732051, 0.732051 1x² + 3x + -3 = 0 -3.791288, 0.791288 1x² + 4x + -4 = 0 -4.828427, 0.828427 1x² + 5x + -5 = 0 -5.854102, 0.854102 1x² + 6x + -6 = 0 -6.872983, 0.872983 1x² + 7x + -7 = 0 -7.887482, 0.887482 1x² + 8x + -8 = 0 -8.898979, 0.898979
参阅
应用函数 std::pow 到二个 valarray 或一个 valarray 与一个值 (函数模板) | |
(C++11)(C++11) |
计算平方根( √x ) (函数) |
右半平面范围中的复平方根 (函数模板) |