ОБНОВЛЕНИЕ: Спасибо, Кевин, я имел в виду < = в названии, а не <.Для double f, float g, Как найти наибольший int i, так что i * g <= f
Это правильно? Это лучшее, что я сумел после неловкого количества времени на проблеме:
public int candidate_answer(double f, float g) {
int test = (int)Math.floor(f/g);
if ((test + 1) * g <= f) {
test++;
}
return test;
}
фон:
Приложения простой игра, что я перешла на собственность от предыдущего программиста , Любопытно, что он решил смешивать поплавки и удваивать бессмысленно, как в переменных-членах, так и в переменных, поэтому есть много ненужного неявного и явного кастинга, идущего вверх и вниз.
Координаты игрока в двойном x, y (игрок считается точкой). Существует плавающий TILE_SIZE, а в мире есть некоторое количество строк и столбцов, количество плиток, а также некоторая общая обработка вне границ. Предполагая, что координата (x, y) находится в границах, я пытаюсь выяснить, в каком элементе находится пользователь, на основе x (для получения столбца) или y (для получения строки). Это похоже, программист 101.
WLOG, Сначала я просто делал col = (int)(x/TILE_SIZE)
. Но, как я обнаружил, например, .5/.1f < 5 и, следовательно, (int)(.5/.1f) == 4
, неправильный ответ. Это привело к вышесказанному утверждению и постановке проблемы.
Затем я обнаружил, что, например, (int)(-9.999999747378752E-5/.1f) == 0
, что привело меня сначала позвонить Math.floor
.
Но теперь я не уверен, какие другие ошибки скрываются в этом подходе или как лучший подход.
(Возможно, это не так важно, если пользователь находится на пороге присутствия в одной строке или другой, и мы случайно округлились до неправильного, но реальная проблема находится в коде, где мы см. неожиданное изменение знака (+, -, 0). Например, некоторые из кода предполагают, что если пользователь находится на плитке в точке (r, c), то это точка фактически содержится в этой геометрии плитки. Когда это не так, мы получаем такие вещи, как отрицательные расстояния, когда ожидаются только неотрицательные, и т. д., и это приводит к тому, что сигналы срабатывают, а в то время как петли ломаются и т. д.)
'i * g
Kevin
<= и обновлено спасибо – jdowdell