mi piacerebbe una funzione floor
con la sintassiIl casting in un file int dopo std :: floor garantisce il risultato corretto?
int floor(double x);
ma std::floor
restituisce un double
. È
static_cast <int> (std::floor(x));
garantito per darmi il numero intero corretto, o potrei avere un problema di off-by-one? Sembra funzionare, ma mi piacerebbe sapere per certo.
Per i punti bonus, perché diavolo std::floor
restituisce un double
in primo luogo?
quindi, se è nella gamma di destra, il cast sta bene dove sta scritto (cosa che implica) questo nelle specifiche? ? –
Bene, ci sono due operazioni qui: std :: floor, e il cast. Std :: floor è pensato per restituire un intero, e il cast è specificato in termini di un valore intero. Finché std :: floor restituisce un valore che è veramente un numero esatto, io ca non vedere come avrebbe senso che fallisse. –
In che modo floor restituirà mai qualcosa che non è un intero esatto? Per i piccoli doppi (epsilon << 1), è possibile rappresentare tutti i valori interi, incluso floor (x). Per big doubles (epsilon >> 1), solo i valori interi possono essere rappresentati, quindi floor (x) == x. – MSalters