# Program Listing for File Numbers.cc

↰ Return to documentation for file (`Numbers.cc`)

    /*--------------------------------------------------------------------------*\
     |                                                                          |
     |  Copyright (C) 2020                                                      |
     |                                                                          |
     |         , __                 , __                                        |
     |        /|/  \               /|/  \                                       |
     |         | __/ _   ,_         | __/ _   ,_                                |
     |         |   \|/  /  |  |   | |   \|/  /  |  |   |                        |
     |         |(__/|__/   |_/ \_/|/|(__/|__/   |_/ \_/|/                       |
     |                           /|                   /|                        |
     |                           \|                   \|                        |
     |                                                                          |
     |      Enrico Bertolazzi                                                   |
     |      Dipartimento di Ingegneria Industriale                              |
     |      Universita` degli Studi di Trento                                   |
     |      email: enrico.bertolazzi@unitn.it                                   |
     |                                                                          |
    \*--------------------------------------------------------------------------*/

    #ifndef DOXYGEN_SHOULD_SKIP_THIS

    #include "Utils.hh"

    #ifdef __clang__
    #pragma clang diagnostic ignored "-Wpoison-system-directories"
    #endif

    namespace Utils {

      //============================================================================
      /*    __                       _ _   _       _   _
      //   / _| ___  _   _ _ __   __| | \ | | __ _| \ | |
      //  | |_ / _ \| | | | '_ \ / _` |  \| |/ _` |  \| |
      //  |  _| (_) | |_| | | | | (_| | |\  | (_| | |\  |
      //  |_|  \___/ \__,_|_| |_|\__,_|_| \_|\__,_|_| \_|
      */
      bool
      foundNaN( double const * const pv, int DIM ) {
        for ( int i = 0; i < DIM; ++i )
          if ( !isRegular(pv[i]) )
            return true;
        return false;
      }

      bool
      foundNaN( float const * const pv, int DIM ) {
        for ( int i = 0; i < DIM; ++i )
          if ( !isRegular(pv[i]) )
            return true;
        return false;
      }

      /*       _               _    _   _       _   _
      //   ___| |__   ___  ___| | _| \ | | __ _| \ | |
      //  / __| '_ \ / _ \/ __| |/ /  \| |/ _` |  \| |
      // | (__| | | |  __/ (__|   <| |\  | (_| | |\  |
      //  \___|_| |_|\___|\___|_|\_\_| \_|\__,_|_| \_|
      */

      #define LINE_LINE_LINE_LINE "--------------------------------------------------------------------------------"

      void
      checkNaN(
        double const * const pv,
        char   const * const v_name,
        int                  DIM,
        int                  line,
        char   const * const file
      ) {
        for ( int i = 0; i < DIM; ++i ) {
          if ( isInfinite(pv[i]) ) {
            UTILS_ERROR(
              "{}\n({}):{}) found Infinity at {}[{}]\n{}\n",
              LINE_LINE_LINE_LINE,
              basename(file), line, v_name, i,
              LINE_LINE_LINE_LINE
            );
          } else if ( isNaN(pv[i]) ) {
            UTILS_ERROR(
              "{}\n({}):{}) found NaN at {}[{}]\n{}\n",
              LINE_LINE_LINE_LINE,
              basename(file), line, v_name, i,
              LINE_LINE_LINE_LINE
            );
          }
        }
      }

      void
      checkNaN(
        float const * const pv,
        char  const * const v_name,
        int                 DIM,
        int                 line,
        char  const * const file
      ) {
        for ( int i = 0; i < DIM; ++i ) {
          if ( isInfinite(pv[i]) ) {
            UTILS_ERROR(
              "{}\n({}):{}) found Infinity at {}[{}]\n{}\n",
              LINE_LINE_LINE_LINE,
              basename(file), line, v_name, i,
              LINE_LINE_LINE_LINE
            );
          } else if ( isNaN(pv[i]) ) {
            UTILS_ERROR(
              "{}\n({}):{}) found NaN at {}[{}]\n{}\n",
              LINE_LINE_LINE_LINE,
              basename(file), line, v_name, i,
              LINE_LINE_LINE_LINE
            );
          }
        }
      }
    }

    #endif