File indexing completed on 2025-11-03 09:44:08
0001 
0002 
0003 
0004 
0005 
0006 
0007 #pragma once
0008 
0009 #include "corecel/Macros.hh"
0010 
0011 namespace celeritas
0012 {
0013 namespace detail
0014 {
0015 
0016 
0017 
0018 
0019 
0020 
0021 template<class T>
0022 struct SoftEqualTraits
0023 {
0024     using value_type = T;
0025 
0026     
0027     static CELER_CONSTEXPR_FUNCTION value_type rel_prec()
0028     {
0029         static_assert(sizeof(T) == 0, "Invalid type for softeq!");
0030         return T();
0031     }
0032 
0033     
0034     static CELER_CONSTEXPR_FUNCTION value_type abs_thresh()
0035     {
0036         static_assert(sizeof(T) == 0, "Invalid type for softeq!");
0037         return T();
0038     }
0039 };
0040 
0041 template<>
0042 struct SoftEqualTraits<double>
0043 {
0044     using value_type = double;
0045     static CELER_CONSTEXPR_FUNCTION value_type sqrt_prec() { return 1.0e-6; }
0046     static CELER_CONSTEXPR_FUNCTION value_type rel_prec() { return 1.0e-12; }
0047     static CELER_CONSTEXPR_FUNCTION value_type abs_thresh() { return 1.0e-14; }
0048 };
0049 
0050 template<>
0051 struct SoftEqualTraits<float>
0052 {
0053     using value_type = float;
0054     static CELER_CONSTEXPR_FUNCTION value_type sqrt_prec() { return 1.0e-3f; }
0055     static CELER_CONSTEXPR_FUNCTION value_type rel_prec() { return 1.0e-6f; }
0056     static CELER_CONSTEXPR_FUNCTION value_type abs_thresh() { return 1.0e-6f; }
0057 };
0058 
0059 
0060 }  
0061 }