Что такое наименьшее значение поплавка A, так что (x < x + A) == true
?Самый маленький эпсилон, чтобы изменить результат сравнения
Я попытался с Float.MIN_VALUE но удивительно (? [1]) не работает
Зная, как IEEE 754 стандартные магазины всплывают значения (значения 0. исключением), я мог бы просто добавить 1 к мантиссе поплавка в вопросе, но эти швы действительно взламывают. Я не хочу ставить байтовые массивы и битовые операции в моем коде для такого тривиального вопроса, особенно с Java. Кроме того, если я просто добавлю 1 к Float.floatToIntBits(), а мантисса - все 1, это увеличит показатель на 1 и установит мантисса равным 0. Я не хочу реализовывать все обработки этих случаев, если это не обязательно.
Нет ли какой-либо функции (надеюсь, встроенной), которая задана поплавком x, она возвращает наименьший поплавок A такой, что (x < x + A) == true
? Если нет, то какой будет самый чистый способ его реализации?
Я использую это, потому что, как я итерация линии вершин
// return the next vertices strictly at the left of pNewX
float otherLeftX = pOppositeToCurrentCave.leftVertexTo(pNewX);
// we add MIN_VALUE so that the next call to leftVertexTo will return the same vertex returned by leftVertexTo(pNewX)
otherLeftX += Float.MIN_VALUE;
while(otherLeftX >= 0 && pOppositeToCurrentCave.hasLeftVertexTo(otherLeftX)) {
otherLeftX = pOppositeToCurrentCave.leftVertexTo(otherLeftX);
//stuff
}
Прямо сейчас из-за этой проблемы первая вершина всегда пропускается, поскольку второй вызов leftVertexTo(otherLeftX)
не возвращается то же значение, которое оно вернуло при первом вызове
[1] Не так удивительно. Я случайно понимаю, после того, как я заметил проблему, так как разрыв между поплавками относителен, ибо независимо от количества! = 0 MIN_VALUE настолько мал, что она будет урезана и (x = x + FLOAT.MIN_VALUE) == true
Там нет ни одного ответа; ответ зависит от 'x'. Если 'x' является' double' между '2^n' и' 2^(n + 1) ', то наименьший float' A' равен '2^(n-51)' (или, может быть, 'n-52 '); это зависит от величины 'x'. Я думаю, что классический способ проверить, чтобы 'x' и' y' были достаточно близки к равному: '(abs (x-y)/abs (x))
ajb
Я знаю, что это зависит от X. Процитировать сам: «Разве нет какой-то функции (надеюсь, встроенной), которая задала float x, она возвращает наименьший float A такой, что (x
Размер шага к следующему представляемому значению ** не ** совпадает с наименьшим 'A', таким как' x