std::atan(std::valarray)(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ’– NAME πŸ’–

okay so bestie, this is std::atan(std::valarray) β€” the NAME line is literally std::atan(std::valarray) - std::atan(std::valarray), which is the same thing twice because the page said so β€” and it lives in the C++ Standard Libary, page std::atan(std::valarray)(3). Their header spelling, not mine πŸ’€ It's the valarray arc-tangent situation, and we're gonna get into it.


🌸 Synopsis 🌸

Defined in header <valarray>

template< class T >
valarray<T> atan( const valarray<T>& va );

For each element in va computes arc tangent of the value of the element. πŸŽ€

πŸŽ€ Parameters πŸŽ€

  • va β€” value array to apply the operation to

πŸ¦‹ Return value πŸ¦‹

Value array containing arc tangents of the values in va. ✨

πŸ’… Notes πŸ’…

Unqualified function (atan) is used to perform the computation. If such function is not available, std::atan is used due to argument-dependent lookup.

The function can be implemented with the return type different from std::valarray. In this case, the replacement type has the following properties:

  • All const member functions of std::valarray are provided.
  • std::valarray, std::slice_array, std::gslice_array, std::mask_array and std::indirect_array can be constructed from the replacement type.
  • For every function taking a const std::valarray<T>& except begin() and end() (since C++11), identical functions taking the replacement types shall be added;
  • For every function taking two const std::valarray<T>& arguments, identical functions taking every combination of const std::valarray<T>& and replacement types shall be added.
  • The return type does not add more than two levels of template nesting over the most deeply-nested argument type.

🧚 Possible implementation 🧚

template<class T>
valarray<T> atan(const valarray<T>& va)
{
    valarray<T> other = va;
    for (T& i : other)
        i = atan(i);

    return other; // proxy object may be returned
}

🌈 Example 🌈

Original says // Run this code β€” so run it, bestie, it's right there:

#include <algorithm>
#include <cmath>
#include <iostream>
#include <valarray>

auto show = [](char const* title, const std::valarray<float>& va)
{
    std::cout << title << " :";
    std::for_each(std::begin(va), std::end(va),
        [](const float x) { std::cout << "  " << std::fixed << x; });
    std::cout << '\n';
};

int main()
{
    const std::valarray<float> x = {.1f, .3f, .6f, .9f};
    const std::valarray<float> f = std::atan(x);
    const std::valarray<float> g = std::tan(f);

    show("x          ", x);
    show("f = atan(x)", f);
    show("g = tan(f) ", g);
}

πŸ“ Output πŸ“

x           :  0.100000  0.300000  0.600000  0.900000
f = atan(x) :  0.099669  0.291457  0.540420  0.732815
g = tan(f)  :  0.100000  0.300000  0.600000  0.900000

πŸ‘€ See also πŸ‘€

  • asin(std::valarray) β€” applies the function std::asin to each element of valarray (function template)
  • acos(std::valarray) β€” applies the function std::acos to each element of valarray (function template)
  • atan2(std::valarray) β€” applies the function std::atan2 to a valarray and a value (function template)
  • tan(std::valarray) β€” applies the function std::tan to each element of valarray (function template)
  • atan
  • atanf β€” computes arc tangent (({\small\arctan{x}})arctan(x))
  • atanl β€” (function)
  • (C++11)
  • (C++11)
  • atan(std::complex) β€” computes arc tangent of a complex number (C++11), (({\small\arctan{z}})arctan(z)), (function template)

🫣 Hidden category 🫣

  • Pages with unreviewed LWG DR marker

mwah πŸ’‹ that's the whole page β€” source http://cppreference.com, version/date 2024.06.10, manual std::atan(std::valarray)(3). go be iconic with your valarrays, bestie 🫢✨

πŸ“¦ where this page comes from