Recuperare l'esatto tipo di valore MACRO <cmath>math.h o funzione?

di Hormus il
7 risposte
Scusatemi se non sono pronto per programmare, ma come si dovrebbe fare a prelevare qualsiasi valore intero boolean nel main?
http://cpp.sh/3vhe se la MACRO è racchiusa da parentesi tonda restituisce un boolean altrimenti int e nel secondo caso se -INF ritorna anche -1 rispetto al semplice due valori booleani.
Questo è da C99/C++11

7 Risposte

  • Puoi spiegarti meglio? In C++ esiste il tipo bool, mentre il C la funzione restituisce un intero e quindi lo gestisci come un intero.
  • 
      std::cout << (bool)isinf(-1.0/0.0) << std::endl;                   // 1
      std::cout << (bool)isinf(-1.0/0.1) << std::endl;                   // 0
      std::cout << std::boolalpha << (bool)isinf(-1.0/0.0) << std::endl; // true
      std::cout << std::boolalpha << (bool)isinf(-1.0/0.1) << std::endl; // false  
    
  • Ciao grazie a tutti per la risposta, secondo questo documento oltre la MACRO is_inf esiste anche l'omonima funzione is_inf quest'ultima restituisce un valore boleano invece di un intero. http://www.cplusplus.com/reference/cmath/isinf mentre qui il discorso delle parentesi tonde (is_inf)(×) che forza a essere una funzione. https://www.boost.org/doc/libs/1_41_0/libs/math/doc/sf_and_dist/html/math_toolkit/utils/fpclass.html
    Spero non abbia fatto confusione, anche voi siete della mia stessa opinione?
    Scusami @Weierstrass questo lo stampa anche dentro la funzione main? Grazie comunque sono abituato con php scarsamente tipizzato. Comunque se ho ragione c'è un bug in php lol.
  • Sì che funzionano nel main()

    Se ti serve proprio una variabile bool, puoi fare così
    
    bool test = isinf(1.0/0.0);
    std::cout << test << std::endl;
    
    Se usi un int al posto del bool va bene lo stesso: i bool non esistono in linguaggio macchina. Nel caso, la variabile intera è nello stato "true" quando è diversa da zero, mentre è nello stato "false" quando è uguale a zero.

    Se hai dei dubbi sulle funzioni o sulle macro che utilizzi, comunque fa fede lo standard
    https://en.wikipedia.org/wiki/Single-precision_floating-point_format
    https://en.wikipedia.org/wiki/Double-precision_floating-point_format
    Per un double (floating point a 64 bit), in rappresentazione esadecimale +infinito=0x7FF0000000000000, mentre -infinito=0xFFF0000000000000
  • Grazie sei molto chiaro, la MACRO può rappresentare anche tre valori mentre il boolean due valori. Ecco l'esempio http://cpp.sh/465z MACRO ritorna intero se è -INF ritorna -1.
  • Nel caso usi la bool, puoi scriverti tu una funzione che restituisca l'intero. In C++11 l'infinito float e double è rappresentato con
  • Grazie Alexv, non mi occorre creare un programma perché dovrei studiare molto prima di applicare l'insegnamento.
    Più che altro volevo espendare le mie conoscenze, php usa C++ e nel frattempo ho capito che il codice sorgente è da cambiare.
    Guarda qui il sorgente e nota il mio commento https://github.com/php/php-src/commit/714d825b62e719447686da6efe3b4063c2f25749
Devi accedere o registrarti per scrivere nel forum
7 risposte