/*
* Copyright 2024 NVIDIA Corporation. All rights reserved.
*
* NOTICE TO LICENSEE:
*
* This source code and/or documentation ("Licensed Deliverables") are
* subject to NVIDIA intellectual property rights under U.S. and
* international Copyright laws.
*
* These Licensed Deliverables contained herein is PROPRIETARY and
* CONFIDENTIAL to NVIDIA and is being provided under the terms and
* conditions of a form of NVIDIA software license agreement by and
* between NVIDIA and Licensee ("License Agreement") or electronically
* accepted by Licensee. Notwithstanding any terms or conditions to
* the contrary in the License Agreement, reproduction or disclosure
* of the Licensed Deliverables to any third party without the express
* written consent of NVIDIA is prohibited.
*
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
* LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
* SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS
* PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
* NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
* DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
* NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
* LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
* SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
* OF THESE LICENSED DELIVERABLES.
*
* U.S. Government End Users. These Licensed Deliverables are a
* "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
* 1995), consisting of "commercial computer software" and "commercial
* computer software documentation" as such terms are used in 48
* C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
* only as a commercial end item. Consistent with 48 C.F.R.12.212 and
* 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
* U.S. Government End Users acquire the Licensed Deliverables with
* only those rights set forth herein.
*
* Any use of the Licensed Deliverables in individual and commercial
* software must include, in the user documentation and internal
* comments to the code, the above Disclaimer and U.S. Government End
* Users Notice.
*/
// to easily switch off fp128 device functions if needed
#ifndef __NV_DISABLE_DEVICE_FP128_FUNCTIONS__
#if !defined(__DEVICE_FP128_FUNCTIONS_H__)
#define __DEVICE_FP128_FUNCTIONS_H__
/*******************************************************************************
* *
* *
* *
*******************************************************************************/
#if defined(__cplusplus) && defined(__CUDACC__)
/*******************************************************************************
* *
* *
* *
*******************************************************************************/
#include "builtin_types.h"
#include "device_types.h"
#if !defined(__CUDA_ARCH__) && !defined(_NVHPC_CUDA)
#define __DEF_IF_HOST { }
#define __INLINE_IF_HOST__ __inline__
#else /* !__CUDA_ARCH__ */
#define __DEF_IF_HOST ;
#define __INLINE_IF_HOST__
#endif /* __CUDA_ARCH__ */
#define __DEVICE_FP128_FUNCTIONS_DECL__ __device__ __cudart_builtin__ __INLINE_IF_HOST__
/*******************************************************************************
* *
* Support for __float128 on: *
* - NVRTC on Linux *
* - GCC version 4.1 or later on x86_64/amd64 *
* - Clang version 3.9 or later on x86_64/amd64 *
* - NVHPC version 21.1 or later on x86_64/amd64 *
* *
*******************************************************************************/
#if defined(__CUDACC_RTC__)
#if !_WIN64
#define __FLOAT128_CPP_SPELLING_ENABLED__
#endif
#else /* !__CUDACC_RTC__ */
#if (defined __NVCOMPILER_MAJOR__)
#if (defined(__x86_64__) || defined(__amd64__)) && \
((__NVCOMPILER_MAJOR__ > 21) || \
(__NVCOMPILER_MAJOR__ == 21 && __NVCOMPILER_MINOR__ >= 1))
#define __FLOAT128_CPP_SPELLING_ENABLED__
#endif
#elif defined(__clang__)
#if (defined(__x86_64__) || defined(__amd64__)) && \
((__clang_major__ > 3) || \
(__clang_major__ == 3 && __clang_minor__ >= 9))
#define __FLOAT128_CPP_SPELLING_ENABLED__
#endif
#elif defined(__GNUC__)
// check gcc version if no other host compiler is used
#if (defined(__x86_64__) || defined(__amd64__)) && \
((__GNUC__ > 4) || \
(__GNUC__ == 4 && __GNUC_MINOR__ >= 1))
#define __FLOAT128_CPP_SPELLING_ENABLED__
#endif
#endif /* (defined __NVCOMPILER_MAJOR__) */
#endif /* !__CUDACC_RTC__ */
/*******************************************************************************
* *
* Support for _Float128 on: *
* - GCC version 13.1 or later on x86_64/amd64/aarch64 *
* *
*******************************************************************************/
#if defined(__GNUC__) && !defined(__clang__) && !defined(__NVCOMPILER_MAJOR__)
// check gcc version if no other host compiler is used
#if (defined(__x86_64__) || defined(__amd64__) || defined(__aarch64__)) && \
((__GNUC__ > 13) || \
(__GNUC__ == 13 && __GNUC_MINOR__ >= 1))
#define __FLOAT128_C_SPELLING_ENABLED__
#endif
#endif /* defined(__GNUC__) && !defined(__clang__) && !defined(__NVCOMPILER_MAJOR__) */
/**
* \defgroup CUDA_MATH_QUAD FP128 Quad Precision Mathematical Functions
* This section describes quad precision mathematical functions.
* To use these functions, include the header file \p device_fp128_functions.h in your program.
*
* Functions declared here have \p __nv_fp128_ prefix to distinguish them
* from other global namespace symbols.
*
* Note that FP128 CUDA Math functions are only available to device programs
* on platforms where host compiler supports the basic quad precision datatype
* \p __float128 or \p _Float128.
*
* Every FP128 CUDA Math function name is overloaded to support either of these
* host-compiler-specific types, whenever the types are available. See for example:
* \code
* #ifdef __FLOAT128_CPP_SPELLING_ENABLED__
* __float128 __nv_fp128_sqrt(__float128 x);
* #endif
* #ifdef __FLOAT128_C_SPELLING_ENABLED__
* _Float128 __nv_fp128_sqrt(_Float128 x);
* #endif
* \endcode
*
* \note_fp128_target_arch
*/
#ifdef __FLOAT128_CPP_SPELLING_ENABLED__
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula \sqrt{x} \end_cuda_math_formula, the square root of the input argument.
*
* \return
* \cuda_math_formula \sqrt{x} \end_cuda_math_formula.
* - __nv_fp128_sqrt(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_sqrt(
* \cuda_math_formula +\infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula +\infty \end_cuda_math_formula.
* - __nv_fp128_sqrt(\p x) returns NaN if \p x is less than 0.
* - __nv_fp128_sqrt(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_sqrt(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula \sin{x} \end_cuda_math_formula, the sine of input argument (measured in radians).
*
* \return
* \cuda_math_formula \sin{x} \end_cuda_math_formula.
* - __nv_fp128_sin(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_sin(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* ) returns NaN.
* - __nv_fp128_sin(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_sin(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula \cos{x} \end_cuda_math_formula, the cosine of input argument (measured in radians).
*
* \return
* \cuda_math_formula \cos{x} \end_cuda_math_formula.
* - __nv_fp128_cos(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns
* \cuda_math_formula 1 \end_cuda_math_formula.
* - __nv_fp128_cos(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* ) returns NaN.
* - __nv_fp128_cos(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_cos(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula \tan{x} \end_cuda_math_formula, the tangent of input argument (measured in radians).
*
* \return
* \cuda_math_formula \tan{x} \end_cuda_math_formula.
* - __nv_fp128_tan(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_tan(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* ) returns NaN.
* - __nv_fp128_tan(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_tan(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula \sin^{-1}{x} \end_cuda_math_formula, the arc sine of input argument.
*
* \return
* The principal value of the arc sine of the input argument \p x.
* Result will be in radians, in the interval [-
* \cuda_math_formula \pi/2 \end_cuda_math_formula
* , +
* \cuda_math_formula \pi/2 \end_cuda_math_formula
* ] for \p x inside [-1, +1].
* - __nv_fp128_asin(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_asin(\p x) returns NaN for \p x outside [-1, +1].
* - __nv_fp128_asin(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_asin(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula \cos^{-1}{x} \end_cuda_math_formula, the arc cosine of input argument.
*
* \return
* The principal value of the arc cosine of the input argument \p x.
* Result will be in radians, in the interval [0,
* \cuda_math_formula \pi \end_cuda_math_formula
* ] for \p x inside [-1, +1].
* - __nv_fp128_acos(1) returns +0.
* - __nv_fp128_acos(\p x) returns NaN for \p x outside [-1, +1].
* - __nv_fp128_acos(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_acos(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula \tan^{-1}{x} \end_cuda_math_formula, the arc tangent of input argument.
*
* \return
* The principal value of the arc tangent of the input argument \p x.
* Result will be in radians, in the interval [-
* \cuda_math_formula \pi/2 \end_cuda_math_formula
* , +
* \cuda_math_formula \pi/2 \end_cuda_math_formula
* ].
* - __nv_fp128_atan(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_atan(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm \pi \end_cuda_math_formula
* /2.
* - __nv_fp128_atan(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_atan(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula e^x \end_cuda_math_formula, the base
* \cuda_math_formula e \end_cuda_math_formula
* exponential of the input argument.
*
* \return
* - __nv_fp128_exp(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns 1.
* - __nv_fp128_exp(
* \cuda_math_formula -\infty \end_cuda_math_formula
* ) returns +0.
* - __nv_fp128_exp(
* \cuda_math_formula +\infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula +\infty \end_cuda_math_formula.
* - __nv_fp128_exp(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_exp(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula 2^x \end_cuda_math_formula, the base 2 exponential of the input argument.
*
* \return
* - __nv_fp128_exp2(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns 1.
* - ex__nv_fp128_exp2p2f(
* \cuda_math_formula -\infty \end_cuda_math_formula
* ) returns +0.
* - __nv_fp128_exp2(
* \cuda_math_formula +\infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula +\infty \end_cuda_math_formula.
* - __nv_fp128_exp2(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_exp2(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula 10^x \end_cuda_math_formula, the base 10 exponential of the input argument.
*
* \return
* - __nv_fp128_exp10(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns 1.
* - __nv_fp128_exp10(
* \cuda_math_formula -\infty \end_cuda_math_formula
* ) returns +0.
* - __nv_fp128_exp10(
* \cuda_math_formula +\infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula +\infty \end_cuda_math_formula.
* - __nv_fp128_exp10(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_exp10(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate
* \cuda_math_formula e^x - 1 \end_cuda_math_formula,
* the base e exponential of the input argument, minus 1.
*
* \return
* - __nv_fp128_expm1(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_expm1(
* \cuda_math_formula -\infty \end_cuda_math_formula
* ) returns -1.
* - __nv_fp128_expm1(
* \cuda_math_formula +\infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula +\infty \end_cuda_math_formula.
* - __nv_fp128_expm1(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_expm1(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula \log_{e}{x} \end_cuda_math_formula, the base
* \cuda_math_formula e \end_cuda_math_formula
* logarithm of the input argument.
*
* \return
* - __nv_fp128_log(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns
* \cuda_math_formula -\infty \end_cuda_math_formula.
* - __nv_fp128_log(1) returns +0.
* - __nv_fp128_log(\p x) returns NaN for \p x < 0.
* - __nv_fp128_log(
* \cuda_math_formula +\infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula +\infty \end_cuda_math_formula.
* - __nv_fp128_log(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_log(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula \log_{2}{x} \end_cuda_math_formula, the base 2 logarithm of the input argument.
*
* \return
* - __nv_fp128_log2(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns
* \cuda_math_formula -\infty \end_cuda_math_formula.
* - __nv_fp128_log2(1) returns +0.
* - __nv_fp128_log2(\p x) returns NaN for \p x < 0.
* - __nv_fp128_log2(
* \cuda_math_formula +\infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula +\infty \end_cuda_math_formula.
* - __nv_fp128_log2(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_log2(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula \log_{10}{x} \end_cuda_math_formula, the base 10 logarithm of the input argument.
*
* \return
* - __nv_fp128_log10(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns
* \cuda_math_formula -\infty \end_cuda_math_formula.
* - __nv_fp128_log10(1) returns +0.
* - __nv_fp128_log10(\p x) returns NaN for \p x < 0.
* - __nv_fp128_log10(
* \cuda_math_formula +\infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula +\infty \end_cuda_math_formula.
* - __nv_fp128_log10(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_log10(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate the value of
* \cuda_math_formula \log_{e}(1+x) \end_cuda_math_formula.
*
* \return
* - __nv_fp128_log1p(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_log1p(-1) returns
* \cuda_math_formula -\infty \end_cuda_math_formula.
* - __nv_fp128_log1p(\p x) returns NaN for \p x < -1.
* - __nv_fp128_log1p(
* \cuda_math_formula +\infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula +\infty \end_cuda_math_formula.
* - __nv_fp128_log1p(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_log1p(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate the value of \cuda_math_formula x^{y} \end_cuda_math_formula, first argument to the power of second argument.
*
* \return
* - __nv_fp128_pow(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* , \p y) returns
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* for \p y an odd integer less than 0.
* - __nv_fp128_pow(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* , \p y) returns
* \cuda_math_formula +\infty \end_cuda_math_formula
* for \p y less than 0 and not an odd integer.
* - __nv_fp128_pow(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* , \p y) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* for \p y an odd integer greater than 0.
* - __nv_fp128_pow(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* , \p y) returns +0 for \p y > 0 and not an odd integer.
* - __nv_fp128_pow(-1,
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* ) returns 1.
* - __nv_fp128_pow(+1, \p y) returns 1 for any \p y, even a NaN.
* - __nv_fp128_pow(\p x,
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns 1 for any \p x, even a NaN.
* - __nv_fp128_pow(\p x, \p y) returns a NaN for finite \p x < 0 and finite non-integer \p y.
* - __nv_fp128_pow(\p x,
* \cuda_math_formula -\infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula +\infty \end_cuda_math_formula
* for
* \cuda_math_formula | x | < 1 \end_cuda_math_formula.
* - __nv_fp128_pow(\p x,
* \cuda_math_formula -\infty \end_cuda_math_formula
* ) returns +0 for
* \cuda_math_formula | x | > 1 \end_cuda_math_formula.
* - __nv_fp128_pow(\p x,
* \cuda_math_formula +\infty \end_cuda_math_formula
* ) returns +0 for
* \cuda_math_formula | x | < 1 \end_cuda_math_formula.
* - __nv_fp128_pow(\p x,
* \cuda_math_formula +\infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula +\infty \end_cuda_math_formula
* for
* \cuda_math_formula | x | > 1 \end_cuda_math_formula.
* - __nv_fp128_pow(
* \cuda_math_formula -\infty \end_cuda_math_formula
* , \p y) returns -0 for \p y an odd integer less than 0.
* - __nv_fp128_pow(
* \cuda_math_formula -\infty \end_cuda_math_formula
* , \p y) returns +0 for \p y < 0 and not an odd integer.
* - __nv_fp128_pow(
* \cuda_math_formula -\infty \end_cuda_math_formula
* , \p y) returns
* \cuda_math_formula -\infty \end_cuda_math_formula
* for \p y an odd integer greater than 0.
* - __nv_fp128_pow(
* \cuda_math_formula -\infty \end_cuda_math_formula
* , \p y) returns
* \cuda_math_formula +\infty \end_cuda_math_formula
* for \p y > 0 and not an odd integer.
* - __nv_fp128_pow(
* \cuda_math_formula +\infty \end_cuda_math_formula
* , \p y) returns +0 for \p y < 0.
* - __nv_fp128_pow(
* \cuda_math_formula +\infty \end_cuda_math_formula
* , \p y) returns
* \cuda_math_formula +\infty \end_cuda_math_formula
* for \p y > 0.
* - __nv_fp128_pow(\p x, \p y) returns NaN if either \p x or \p y or both are NaN and \p x \cuda_math_formula \neq \end_cuda_math_formula +1 and \p y \cuda_math_formula \neq\pm 0 \end_cuda_math_formula.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_pow(__float128 x, __float128 y) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula \sinh{x} \end_cuda_math_formula, the hyperbolic sine of the input argument.
*
* Calculate \cuda_math_formula \sinh{x} \end_cuda_math_formula, the hyperbolic sine of the input argument \p x.
*
* \return
* - __nv_fp128_sinhinh(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_sinh(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm \infty \end_cuda_math_formula.
* - __nv_fp128_sinh(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_sinh(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula \cosh{x} \end_cuda_math_formula, the hyperbolic cosine of the input argument.
*
* \return
* - __nv_fp128_cosh(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns 1.
* - __nv_fp128_cosh(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula +\infty \end_cuda_math_formula.
* - __nv_fp128_cosh(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_cosh(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula \tanh{x} \end_cuda_math_formula, the hyperbolic tangent of the input argument.
*
* \return
* - __nv_fp128_tanh(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_tanh(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm 1 \end_cuda_math_formula.
* - __nv_fp128_tanh(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_tanh(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula \sinh^{-1}{x} \end_cuda_math_formula, the inverse hyperbolic sine of the input argument.
*
* \return
* - __nv_fp128_asinh(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_asinh(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm \infty \end_cuda_math_formula.
* - __nv_fp128_asinh(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_asinh(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula \cosh^{-1}{x} \end_cuda_math_formula, the nonnegative inverse hyperbolic cosine of the input argument.
*
* \return
* Result will be in the interval [0,
* \cuda_math_formula +\infty \end_cuda_math_formula
* ].
* - __nv_fp128_acosh(1) returns 0.
* - __nv_fp128_acosh(\p x) returns NaN for \p x in the interval [
* \cuda_math_formula -\infty \end_cuda_math_formula
* , 1).
* - __nv_fp128_acosh(
* \cuda_math_formula +\infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula +\infty \end_cuda_math_formula.
* - __nv_fp128_acosh(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_acosh(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula \tanh^{-1}{x} \end_cuda_math_formula, the inverse hyperbolic tangent of the input argument.
*
* \return
* - __nv_fp128_atanh(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_atanh(
* \cuda_math_formula \pm 1 \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm \infty \end_cuda_math_formula.
* - __nv_fp128_atanh(\p x) returns NaN for \p x outside interval [-1, 1].
* - __nv_fp128_atanh(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_atanh(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Truncate input argument to the integral part.
*
* \return
* Rounded \p x to the nearest integer value in floating-point format, that does not exceed \p x in
* magnitude.
* - __nv_fp128_trunc(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_trunc(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm \infty \end_cuda_math_formula.
* - __nv_fp128_trunc(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_trunc(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula \lfloor x \rfloor \end_cuda_math_formula, the largest integer less than or equal to \p x.
*
* \return
* \cuda_math_formula \lfloor x \rfloor \end_cuda_math_formula
* expressed as a floating-point number.
* - __nv_fp128_floor(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm \infty \end_cuda_math_formula.
* - __nv_fp128_floor(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_floor(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_floor(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula \lceil x \rceil \end_cuda_math_formula, the smallest integer greater than or equal to \p x.
*
* \return
* \cuda_math_formula \lceil x \rceil \end_cuda_math_formula
* expressed as a floating-point number.
* - __nv_fp128_ceil(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm \infty \end_cuda_math_formula.
* - __nv_fp128_ceil(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_ceil(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_ceil(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Round to nearest integer value in floating-point format,
* with halfway cases rounded away from zero.
*
* \return
* - __nv_fp128_round(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_round(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm \infty \end_cuda_math_formula.
* - __nv_fp128_round(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_round(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Round to nearest integer value in floating-point format,
* with halfway cases rounded to the nearest even integer value.
*
* \return
* - __nv_fp128_rint(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_rint(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula \pm \infty \end_cuda_math_formula.
* - __nv_fp128_rint(NaN) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_rint(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula |x| \end_cuda_math_formula, the absolute value of the input argument.
*
* \return
* - __nv_fp128_fabs(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* ) returns
* \cuda_math_formula +\infty \end_cuda_math_formula.
* - __nv_fp128_fabs(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns +0.
* - __nv_fp128_fabs(NaN) returns an unspecified NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_fabs(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Create value with the magnitude of the first agument \p x, and the sign of the second argument \p y.
*
* \return
* - copysign(\p NaN, \p y) returns a \p NaN with the sign of \p y.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_copysign(__float128 x, __float128 y) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Determine the maximum numeric value of the arguments.
*
* \return
* The maximum numeric value of the arguments \p x and \p y. Treats NaN
* arguments as missing data.
* - If both arguments are NaN, returns NaN.
* - If one argument is NaN, returns the numeric argument.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_fmax(__float128 x, __float128 y) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Determine the minimum numeric value of the arguments.
*
* \return
* The minimum numeric value of the arguments \p x and \p y. Treats NaN
* arguments as missing data.
* - If both arguments are NaN, returns NaN.
* - If one argument is NaN, returns the numeric argument.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_fmin(__float128 x, __float128 y) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Compute the positive difference between \p x and \p y.
*
* \return
* - __nv_fp128_fdim(\p x, \p y) returns \p x - \p y if \cuda_math_formula x > y \end_cuda_math_formula.
* - __nv_fp128_fdim(\p x, \p y) returns +0 if \cuda_math_formula x \leq y \end_cuda_math_formula.
* - If either argument is NaN, NaN is returned.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_fdim(__float128 x, __float128 y) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate the floating-point remainder of \p x / \p y.
*
* \return
* The floating-point remainder of the division operation \p x / \p y calculated
* by this function is exactly the value x - n*y, where \p n is \p x / \p y with its fractional part truncated.
* - The computed value will have the same sign as \p x, and its magnitude will be less than the magnitude of \p y.
* - __nv_fp128_fmod(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* , \p y) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* if \p y is not zero.
* - __nv_fp128_fmod(\p x,
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* ) returns \p x if \p x is finite.
* - __nv_fp128_fmod(\p x, \p y) returns NaN if \p x is
* \cuda_math_formula \pm\infty \end_cuda_math_formula
* or \p y is zero.
* - If either argument is NaN, NaN is returned.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_fmod(__float128 x, __float128 y) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Compute the floating-point remainder function.
*
* \return
* The floating-point remainder \p r of dividing
* \p x by \p y for nonzero \p y is defined as
* \cuda_math_formula r = x - n y \end_cuda_math_formula.
* The value \p n is the integer value nearest
* \cuda_math_formula \frac{x}{y} \end_cuda_math_formula.
* In the halfway cases when
* \cuda_math_formula | n -\frac{x}{y} | = \frac{1}{2} \end_cuda_math_formula
* , the
* even \p n value is chosen.
* - __nv_fp128_remainder(\p x,
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns NaN.
* - __nv_fp128_remainder(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* , \p y) returns NaN.
* - __nv_fp128_remainder(\p x,
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* ) returns \p x for finite \p x.
* - If either argument is NaN, NaN is returned.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_remainder(__float128 x, __float128 y) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Extract mantissa and exponent of the floating-point input argument.
*
* Decompose the floating-point value \p x into a component \p m for the
* normalized fraction element and an integral term \p n for the exponent.
* The absolute value of \p m will be greater than or equal to 0.5 and
* less than 1.0 or it will be equal to 0;
* \cuda_math_formula x = m\cdot 2^n \end_cuda_math_formula.
* The integer exponent \p n will be stored in the location to which \p nptr points.
*
* \return
* The fractional component \p m.
* - __nv_fp128_frexp(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* , \p nptr) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* and stores zero in the location pointed to by \p nptr.
* - __nv_fp128_frexp(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* , \p nptr) returns
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* and stores an unspecified value in the
* location to which \p nptr points.
* - __nv_fp128_frexp(NaN, \p y) returns a NaN and stores an unspecified value in the location to which \p nptr points.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_frexp(__float128 x, int* nptr) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Break down the input argument into fractional and integral parts.
*
* Break down the argument \p x into fractional and integral parts. The
* integral part is stored in floating-point format in the location to which \p iptr points.
* Fractional and integral parts are given the same sign as the argument \p x.
*
* \return
* - __nv_fp128_modf(
* \cuda_math_formula \pm x \end_cuda_math_formula
* , \p iptr) returns a result with the same sign as \p x.
* - __nv_fp128_modf(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* , \p iptr) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* and stores
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* in the object pointed to by \p iptr.
* - __nv_fp128_modf(NaN, \p iptr) stores a NaN in the object pointed to by \p iptr and returns a NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_modf(__float128 x, __float128* iptr) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate \cuda_math_formula \sqrt{x^2+y^2} \end_cuda_math_formula, the square root of the sum of squares of two arguments.
*
* \return
* The length of the hypotenuse of a right triangle whose two sides have lengths
* \cuda_math_formula |x| \end_cuda_math_formula and \cuda_math_formula |y| \end_cuda_math_formula without undue overflow or underflow.
* - __nv_fp128_hypot(\p x,\p y), __nv_fp128_hypot(\p y,\p x), and __nv_fp128_hypot(\p x, \p -y) are equivalent.
* - __nv_fp128_hypot(\p x,
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) is equivalent to __nv_fp128_fabs(\p x).
* - __nv_fp128_hypot(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* ,\p y) returns
* \cuda_math_formula +\infty \end_cuda_math_formula,
* even if \p y is a NaN.
* - __nv_fp128_hypot(NaN, \p y) returns NaN, when \p y is not \cuda_math_formula \pm\infty \end_cuda_math_formula.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_hypot(__float128 x, __float128 y) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Compute
* \cuda_math_formula x \times y + z \end_cuda_math_formula
* as a single operation using round-to-nearest-even rounding mode.
*
* \return
* The value of
* \cuda_math_formula x \times y + z \end_cuda_math_formula
* as a single ternary operation, rounded once using round-to-nearest,
* ties-to-even rounding mode.
* - __nv_fp128_fma(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* ,
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* , \p z) returns NaN.
* - __nv_fp128_fma(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ,
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* , \p z) returns NaN.
* - __nv_fp128_fma(\p x, \p y,
* \cuda_math_formula -\infty \end_cuda_math_formula
* ) returns NaN if
* \cuda_math_formula x \times y \end_cuda_math_formula
* is an exact
* \cuda_math_formula +\infty \end_cuda_math_formula.
* - __nv_fp128_fma(\p x, \p y,
* \cuda_math_formula +\infty \end_cuda_math_formula
* ) returns NaN if
* \cuda_math_formula x \times y \end_cuda_math_formula
* is an exact
* \cuda_math_formula -\infty \end_cuda_math_formula.
* - __nv_fp128_fma(\p x, \p y, \cuda_math_formula \pm 0 \end_cuda_math_formula) returns \cuda_math_formula \pm 0 \end_cuda_math_formula if \cuda_math_formula x \times y \end_cuda_math_formula is exact \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_fma(\p x, \p y, \cuda_math_formula \mp 0 \end_cuda_math_formula) returns \cuda_math_formula +0 \end_cuda_math_formula if \cuda_math_formula x \times y \end_cuda_math_formula is exact \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_fma(\p x, \p y, \p z) returns \cuda_math_formula +0 \end_cuda_math_formula if \cuda_math_formula x \times y + z \end_cuda_math_formula is exactly zero and \cuda_math_formula z \neq 0 \end_cuda_math_formula.
* - If either argument is NaN, NaN is returned.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_fma(__float128 x, __float128 y, __float128 c) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Calculate the value of
* \cuda_math_formula x\cdot 2^{exp} \end_cuda_math_formula.
*
* \return
* - __nv_fp128_ldexp(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* , \p exp) returns
* \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_ldexp(\p x, 0) returns \p x.
* - __nv_fp128_ldexp(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* , \p exp) returns
* \cuda_math_formula \pm \infty \end_cuda_math_formula.
* - __nv_fp128_ldexp(NaN, \p exp) returns NaN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_ldexp(__float128 x, int exp) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Compute the unbiased integer exponent of the input argument.
*
* \return
* - If successful, returns the unbiased exponent of the argument.
* - __nv_fp128_ilogb(
* \cuda_math_formula \pm 0 \end_cuda_math_formula
* ) returns INT_MIN.
* - __nv_fp128_ilogb(NaN) returns INT_MIN.
* - __nv_fp128_ilogb(
* \cuda_math_formula \pm \infty \end_cuda_math_formula
* ) returns INT_MAX.
* - Note: above behavior does not take into account FP_ILOGB0 nor FP_ILOGBNAN.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ int __nv_fp128_ilogb(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Compute \cuda_math_formula x \cdot y \end_cuda_math_formula, the product of the two floating-point inputs using round-to-nearest-even rounding mode.
*
* \return Returns \p x * \p y.
* - sign of the product \p x * \p y is XOR of the signs of \p x and \p y when neither inputs nor result are NaN.
* - __nv_fp128_mul(\p x, \p y) is equivalent to __nv_fp128_mul(\p y, \p x).
* - __nv_fp128_mul(\p x, \cuda_math_formula \pm\infty \end_cuda_math_formula) returns \cuda_math_formula \infty \end_cuda_math_formula of appropriate sign for \p x \cuda_math_formula \neq 0 \end_cuda_math_formula.
* - __nv_fp128_mul(\cuda_math_formula \pm 0 \end_cuda_math_formula, \cuda_math_formula \pm\infty \end_cuda_math_formula) returns NaN.
* - __nv_fp128_mul(\cuda_math_formula \pm 0 \end_cuda_math_formula, \p y) returns \cuda_math_formula 0 \end_cuda_math_formula of appropriate sign for finite \p y.
* - If either argument is NaN, NaN is returned.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_mul(__float128 x, __float128 y) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Compute \cuda_math_formula x + y \end_cuda_math_formula, the sum of the two floating-point inputs using round-to-nearest-even rounding mode.
*
* \return Returns \p x + \p y.
* - __nv_fp128_add(\p x, \p y) is equivalent to __nv_fp128_add(\p y, \p x).
* - __nv_fp128_add(\p x, \cuda_math_formula \pm\infty \end_cuda_math_formula) returns \cuda_math_formula \pm\infty \end_cuda_math_formula for finite \p x.
* - __nv_fp128_add(\cuda_math_formula \pm\infty \end_cuda_math_formula, \cuda_math_formula \pm\infty \end_cuda_math_formula) returns \cuda_math_formula \pm\infty \end_cuda_math_formula.
* - __nv_fp128_add(\cuda_math_formula \pm\infty \end_cuda_math_formula, \cuda_math_formula \mp\infty \end_cuda_math_formula) returns NaN.
* - __nv_fp128_add(\cuda_math_formula \pm 0 \end_cuda_math_formula, \cuda_math_formula \pm 0 \end_cuda_math_formula) returns \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_add(\p x, \p -x) returns \cuda_math_formula +0 \end_cuda_math_formula for finite \p x, including \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - If either argument is NaN, NaN is returned.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_add(__float128 x, __float128 y) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Compute \cuda_math_formula x - y \end_cuda_math_formula, the difference of the two floating-point inputs using round-to-nearest-even rounding mode.
*
* \return Returns \p x - \p y.
* - __nv_fp128_sub(\cuda_math_formula \pm\infty \end_cuda_math_formula, \p y) returns \cuda_math_formula \pm\infty \end_cuda_math_formula for finite \p y.
* - __nv_fp128_sub(\p x, \cuda_math_formula \pm\infty \end_cuda_math_formula) returns \cuda_math_formula \mp\infty \end_cuda_math_formula for finite \p x.
* - __nv_fp128_sub(\cuda_math_formula \pm\infty \end_cuda_math_formula, \cuda_math_formula \pm\infty \end_cuda_math_formula) returns NaN.
* - __nv_fp128_sub(\cuda_math_formula \pm\infty \end_cuda_math_formula, \cuda_math_formula \mp\infty \end_cuda_math_formula) returns \cuda_math_formula \pm\infty \end_cuda_math_formula.
* - __nv_fp128_sub(\cuda_math_formula \pm 0 \end_cuda_math_formula, \cuda_math_formula \mp 0 \end_cuda_math_formula) returns \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - __nv_fp128_sub(\p x, \p x) returns \cuda_math_formula +0 \end_cuda_math_formula for finite \p x, including \cuda_math_formula \pm 0 \end_cuda_math_formula.
* - If either argument is NaN, NaN is returned.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_sub(__float128 x, __float128 y) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Compute \cuda_math_formula \frac{x}{y} \end_cuda_math_formula, the quotient of the two floating-point inputs using round-to-nearest-even rounding mode.
*
* \return
* - sign of the quotient \p x / \p y is XOR of the signs of \p x and \p y when neither inputs nor result are NaN.
* - __nv_fp128_div(\cuda_math_formula \pm 0 \end_cuda_math_formula, \cuda_math_formula \pm 0 \end_cuda_math_formula) returns NaN.
* - __nv_fp128_div(\cuda_math_formula \pm\infty \end_cuda_math_formula, \cuda_math_formula \pm\infty \end_cuda_math_formula) returns NaN.
* - __nv_fp128_div(\p x, \cuda_math_formula \pm\infty \end_cuda_math_formula) returns \cuda_math_formula 0 \end_cuda_math_formula of appropriate sign for finite \p x.
* - __nv_fp128_div(\cuda_math_formula \pm\infty \end_cuda_math_formula, \p y) returns \cuda_math_formula \infty \end_cuda_math_formula of appropriate sign for finite \p y.
* - __nv_fp128_div(\p x, \cuda_math_formula \pm 0 \end_cuda_math_formula) returns \cuda_math_formula \infty \end_cuda_math_formula of appropriate sign for \p x \cuda_math_formula \neq 0 \end_cuda_math_formula.
* - __nv_fp128_div(\cuda_math_formula \pm 0 \end_cuda_math_formula, \p y) returns \cuda_math_formula 0 \end_cuda_math_formula of appropriate sign for \p y \cuda_math_formula \neq 0 \end_cuda_math_formula.
* - If either argument is NaN, NaN is returned.
*
* \note_accuracy_quad
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ __float128 __nv_fp128_div(__float128 x, __float128 y) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Determine whether the input argument is a NaN.
*
* \return
* A nonzero value if and only if \p x is a NaN value.
*
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ int __nv_fp128_isnan(__float128 x) __DEF_IF_HOST
/**
* \ingroup CUDA_MATH_QUAD
* \brief Determine whether the pair of inputs is unordered.
*
* \return
* - nonzero value if at least one of input values is a NaN.
* - zero otherwise
*
* \note_fp128_target_arch
*/
__DEVICE_FP128_FUNCTIONS_DECL__ int __nv_fp128_isunordered(__float128 x, __float128 y) __DEF_IF_HOST
#endif /* __FLOAT128_CPP_SPELLING_ENABLED__ */
#ifdef __FLOAT128_C_SPELLING_ENABLED__
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_sqrt(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_sin(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_cos(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_tan(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_asin(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_acos(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_atan(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_exp(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_exp2(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_exp10(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_expm1(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_log(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_log2(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_log10(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_log1p(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_pow(_Float128 x, _Float128 y) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_sinh(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_cosh(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_tanh(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_asinh(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_acosh(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_atanh(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_trunc(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_floor(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_ceil(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_round(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_rint(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_fabs(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_copysign(_Float128 x, _Float128 y) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_fmax(_Float128 x, _Float128 y) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_fmin(_Float128 x, _Float128 y) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_fdim(_Float128 x, _Float128 y) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_fmod(_Float128 x, _Float128 y) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_remainder(_Float128 x, _Float128 y) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_frexp(_Float128 x, int* nptr) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_modf(_Float128 x, _Float128* iptr) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_hypot(_Float128 x, _Float128 y) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_fma(_Float128 x, _Float128 y, _Float128 c) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_ldexp(_Float128 x, int exp) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ int __nv_fp128_ilogb(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_mul(_Float128 x, _Float128 y) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_add(_Float128 x, _Float128 y) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_sub(_Float128 x, _Float128 y) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ _Float128 __nv_fp128_div(_Float128 x, _Float128 y) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ int __nv_fp128_isnan(_Float128 x) __DEF_IF_HOST
__DEVICE_FP128_FUNCTIONS_DECL__ int __nv_fp128_isunordered(_Float128 x, _Float128 y) __DEF_IF_HOST
#endif /* __FLOAT_C_SPELLING_ENABLED */
#undef __DEVICE_FP128_FUNCTIONS_DECL__
#endif /* __cplusplus && __CUDACC__ */
#endif /* !__DEVICE_FP128_FUNCTIONS_H__ */
#endif /* !__NV_DISABLE_DEVICE_FP128_FUNCTIONS__ */