12#ifndef ARCANE_DATATYPE_NUMERIC_H
13#define ARCANE_DATATYPE_NUMERIC_H
17#include "arcane/utils/Limits.h"
18#include "arcane/utils/Math.h"
52 constexpr ARCCORE_HOST_DEVICE
static bool isNearlyZero (
const T& a)
62 constexpr ARCCORE_HOST_DEVICE
static bool isZero (
const T& a)
72 constexpr ARCCORE_HOST_DEVICE
static bool isNearlyEqual(
const T& a,
const T&
b)
92 constexpr ARCCORE_HOST_DEVICE
static bool isEqual(
const T& a,
const T&
b)
113 constexpr ARCCORE_HOST_DEVICE
static bool isNearlyZero(T a)
115 return ( (a<0.) ? a>-nepsilon() : a<nepsilon() );
128 return ( (a<0.) ? a>-epsilon : a<epsilon );
135 return ( (a<0.) ? a>-(
b*nepsilon()) : a<(
b*nepsilon()) );
138 constexpr ARCCORE_HOST_DEVICE
static bool isTrueZero(T a) {
return (a==
FloatInfo<T>::zero()); }
139 constexpr ARCCORE_HOST_DEVICE
static bool isZero(T a) {
return (a==FloatInfo<T>::zero()); }
140 constexpr ARCCORE_HOST_DEVICE
static bool isNearlyEqual(T a,T b)
142 T s = math::abs(a) + math::abs(b);
144 return (d==FloatInfo<T>::zero()) ? true : isNearlyZero(d/s);
146 constexpr ARCCORE_HOST_DEVICE
static bool isNearlyEqualWithEpsilon(T a,T b,T epsilon)
148 T s = math::abs(a) + math::abs(b);
152 constexpr ARCCORE_HOST_DEVICE
static bool isEqual(T a,T b)
184#ifdef ARCANE_REAL_NOT_BUILTIN
211template<
class _Type>
constexpr ARCCORE_HOST_DEVICE
inline bool
218constexpr ARCCORE_HOST_DEVICE
inline bool
234template<
class _Type>
constexpr ARCCORE_HOST_DEVICE
inline bool
241ARCCORE_HOST_DEVICE
constexpr inline bool
252template<
class _Type>
constexpr ARCCORE_HOST_DEVICE
inline bool
259ARCCORE_HOST_DEVICE
constexpr inline bool
275template<
class _Type>
constexpr ARCCORE_HOST_DEVICE
inline bool
288template<
class _Type>
constexpr ARCCORE_HOST_DEVICE
inline bool
289isNearlyZero(
const _Type& a)
299template<
class _Type>
constexpr ARCCORE_HOST_DEVICE
inline bool
Définit l'opérateur == pour les flottants.
constexpr static ARCCORE_HOST_DEVICE bool isNearlyZeroWithEpsilon(T a, T epsilon)
Compare a à zéro à epsilon près.
static ARCCORE_HOST_DEVICE bool isNearlyZero(T a, T b)
Compare avec b*epsilon.
Informations sur le type flottant.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Opérations de comparaisons pour un type numérique T.
constexpr static ARCCORE_HOST_DEVICE bool isNearlyZero(const T &a)
Compare a à zéro.
constexpr static ARCCORE_HOST_DEVICE bool isNearlyEqual(const T &a, const T &b)
Compare a à b.
constexpr static ARCCORE_HOST_DEVICE bool isEqual(const T &a, const T &b)
Compare a à b.
constexpr static ARCCORE_HOST_DEVICE bool isZero(const T &a)
Compare a à zéro.
constexpr static ARCCORE_HOST_DEVICE bool isNearlyEqualWithEpsilon(const T &a, const T &b, const T &)
Compare a à b.
constexpr ARCCORE_HOST_DEVICE bool isNearlyZeroWithEpsilon(const _Type &a, const _Type &epsilon)
Teste si une valeur est à peu près égale à zéro à un epsilon près.
constexpr ARCCORE_HOST_DEVICE bool isEqual(const _Type &a, const _Type &b)
Teste l'égalité bit à bit entre deux valeurs.
constexpr ARCCORE_HOST_DEVICE bool isNearlyEqual(const _Type &a, const _Type &b)
Teste si deux valeurs sont à un peu près égales. Pour les types entiers, cette fonction est équivalen...
bool isZero(const BuiltInProxy< _Type > &a)
Teste si une valeur est exactement égale à zéro.
constexpr ARCCORE_HOST_DEVICE bool isNearlyEqualWithEpsilon(const _Type &a, const _Type &b, const _Type &epsilon)
Teste si deux valeurs sont à un peu près égales. Pour les types entiers, cette fonction est équivalen...
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-