std::tanh(std::valarray)(3)

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

🌸 std::tanh(std::valarray)(3) 🌸

okay so bestie, this is the std::tanh(std::valarray)(3) page from the C++ Standard Libary manual β€” yes, β€œLibary” is literally how the manual name shows up, and we’re keeping it because facts don’t change, only vibes do πŸ’…. This whole page is about applying hyperbolic tangent to every element of a valarray, and it’s giving very β€œmath but make it containerized” energy ✨


✨ NAME ✨

std::tanh(std::valarray) β€” std::tanh(std::valarray), that’s the whole name section, bestie. It’s the std::tanh overload for std::valarray, and it is exactly what it says on the tin 🫢

🌈 Synopsis 🌈

Defined in header <valarray>:

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

For each element in va, this computes the hyperbolic tangent of the value of the element. literally element-by-element glow-up 😌

🫢 Parameters 🫢

  • va β€” value array to apply the operation to. that’s the input array, bestie; it’s a const valarray<T>&.

πŸŽ€ Return value πŸŽ€

Value array containing hyperbolic tangent of the values in va. so you get a whole value-array vibe back, full of tanh’d values ✨

πŸ’… Notes πŸ’…

Unqualified function (tanh) is used to perform the computation. If such function is not available, std::tanh 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 🧚

here’s one way it could look under the hood, no cap:

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

    return other; // proxy object may be returned
}

πŸ”₯ Example πŸ”₯

// Run this code

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

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

int main()
{
    const std::valarray<double> x = {.0, .1, .2, .3};
    const std::valarray<double> sinh = std::sinh(x);
    const std::valarray<double> cosh = std::cosh(x);
    const std::valarray<double> tanh = std::tanh(x);
    const std::valarray<double> tanh_by_def = sinh / cosh;
    const std::valarray<double> tanh_2x = std::tanh(2.0 * x);
    const std::valarray<double> tanh_2x_by_def =
        (2.0 * tanh) / (1.0 + std::pow(tanh, 2.0));

    show("x              ", x);
    show("tanh(x)        ", tanh);
    show("tanh(x) (def)  ", tanh_by_def);
    show("tanh(2*x)      ", tanh_2x);
    show("tanh(2*x) (def)", tanh_2x_by_def);
}

✨ Output ✨

x               :  0.000000  0.100000  0.200000  0.300000
tanh(x)         :  0.000000  0.099668  0.197375  0.291313
tanh(x) (def)   :  0.000000  0.099668  0.197375  0.291313
tanh(2*x)       :  0.000000  0.197375  0.379949  0.537050
tanh(2*x) (def) :  0.000000  0.197375  0.379949  0.537050

πŸ¦‹ See also πŸ¦‹

  • sinh(std::valarray) β€” applies the function std::sinh to each element of valarray (function template)
  • cosh(std::valarray) β€” applies the function std::cosh to each element of valarray (function template)
  • tanh, tanhf, tanhl β€” computes hyperbolic tangent (\({\small\tanh{x}}\)tanh(x)) (function) (C++11) (C++11)
  • tanh(std::complex) β€” computes hyperbolic tangent of a complex number (\({\small\tanh{z}}\)tanh(z)) (function template)

πŸ™ˆ Hidden category πŸ™ˆ

  • Pages with unreviewed LWG DR marker

okay that’s the whole page, bestie. it came from http://cppreference.com, version/date 2024.06.10, and the page name is std::tanh(std::valarray)(3). mwah πŸ’‹ stay hyperbolic ✨

πŸ“¦ where this page comes from