c++ max double




Perché numeric_limits:: min restituisce un valore negativo per int ma valori positivi per float/double? (2)

Perché numeric_limits :: min restituisce un valore negativo per int, ma valori positivi per es. Float e double?

#include<iostream>
#include<limits>

using namespace std;

int main() {
  cout << "int: " << numeric_limits<int>::min() << " "
       << "float: " << numeric_limits<float>::min() << " "
       << "double: " << numeric_limits<double>::min() << "\n";
  return 0;
}

Produzione:

int: -2147483648 float: 1.17549e-38 double: 2.22507e-308

Da cppreference:

Restituisce il valore finito minimo rappresentabile dal tipo numerico T.

Per i tipi a virgola mobile con denormalizzazione, min restituisce il valore normalizzato positivo minimo. Si noti che questo comportamento potrebbe essere inaspettato , soprattutto se confrontato con il comportamento di min per i tipi interi. Per trovare il valore che non ha valori inferiori, usa numeric_limits::lowest .

min è significativo solo per i tipi con limiti e per i tipi senza segno senza limiti, cioè i tipi che rappresentano un insieme infinito di valori negativi non hanno un minimo significativo.


È sfortunato, ma dietro nomi simili si trova un significato completamente diverso. È stato trasferito da C, dove DBL_MIN e INT_MIN hanno lo stesso "problema".

Dato che non si può fare molto, basta ricordare cosa significa cosa.


Per definizione, per i tipi a virgola mobile, min restituisce il più piccolo valore positivo che il tipo può codificare, non il più basso .

Se si desidera il valore più basso, utilizzare invece numeric_limits::lowest .

Documentazione: http://en.cppreference.com/w/cpp/types/numeric_limits/min

Per quanto riguarda il motivo per cui è così, posso solo ipotizzare che il comitato Standard avesse bisogno di un modo per rappresentare tutte le forme di valori estremi per tutti i diversi tipi nativi. Nel caso di tipi interi, ci sono solo due tipi di estremo: massimo positivo e massimo negativo. Per i galleggianti ce n'è un altro: il più piccolo possibile.

Se pensi che la semantica sia un po 'confusa, sono d'accordo. La semantica delle #define correlate nello standard C è confusa più o meno allo stesso modo.





numeric-limits