AGGIORNAMENTO: Grazie Kevin, mi significava < = nel titolo, non <.Per doppia f, g galleggiante, Come trovare più grande che int, in modo tale che i * g <= f
È corretto? E 'il migliore che sono riuscito, dopo una quantità imbarazzante di tempo sul problema:
public int candidate_answer(double f, float g) {
int test = (int)Math.floor(f/g);
if ((test + 1) * g <= f) {
test++;
}
return test;
}
Background:
L'applicazione è un gioco semplice che ho preso sulla proprietà per un programmatore dal precedente . Curiosamente, ha scelto di mescolare i float e di raddoppiare in modo arbitrario, sia nelle variabili membro che in quella argomento, quindi c'è un sacco di casting implicito ed esplicito non necessario che va su e giù.
Le coordinate del giocatore sono al doppio x, y (si presume che il giocatore sia un punto). C'è un float TILE_SIZE, e il mondo è un certo numero di righe e colonne vale la pena di piastrelle, oltre ad alcune generiche manipolazioni fuori dai limiti. Supponendo che le coordinate (x, y) siano vincolate, sto cercando di capire quale tessera l'utente si trova, in base a x (per ottenere una colonna) o a y (per ottenere una riga). Questo è come, programmatore 101.
WLOG, All'inizio stavo solo facendo col = (int)(x/TILE_SIZE)
. Ma come ho scoperto, ad esempio, .5/.1f < 5, e quindi (int)(.5/.1f) == 4
, la risposta sbagliata. Ciò ha portato alla suddetta affermazione e formulazione del problema.
Quindi ho scoperto che, ad esempio, (int)(-9.999999747378752E-5/.1f) == 0
, che mi ha portato a chiamare prima Math.floor
.
Ma ora non sono sicuro di quali altri bug si nascondano in questo approccio o quale sia l'approccio migliore.
(Potrebbe non sembrare un grosso problema se l'utente è sul punto di trovarsi in una fila o nell'altra, e accidentalmente si arriva a quello sbagliato, ma il vero problema è nel codice, dove vedi le modifiche ai segni inattese (+, -, 0). Ad esempio, parte del codice parte dal presupposto che se l'utente si trova sulla tessera in (r, c), allora il suo punto è effettivamente contenuto da quella geometria della piastrella. otteniamo cose come distanze negative quando ci si aspetta solo non-negativi, ecc., e fa sì che gli asseriti si attivino e mentre i loop si interrompano e così via.)
'i * g
Kevin
<=, e aggiornato, grazie – jdowdell