Рассмотрим только для развлекательных целей:
Только 2 значения с плавающей запятой сравниваются равными 0f
: ноль и отрицательный ноль, и они отличаются только на 1 бит.Так что эмуляция схем / программного обеспечения, которая проверяет, ясны ли 31 незнаковые биты, сделает это.
Сравнение >0f
немного сложнее, так как отрицательные числа и 0 приводят к ложным, положительные числа приводят к истине, но значения NaN (обоих знаков) также приводят к значению false, поэтому это немного больше, чем просто проверка знака знака.
В зависимости от режима с плавающей запятой любая операция может привести к сверхточному результату с плавающей запятойперед сравнением зарегистрируйте округление до 32 бит, так что счет даже там.
Если бы разница была вообще, я бы ожидал, что !=
будет быстрее, но я бы не ожидалразница должна быть, и я не удивлюсь, что ошибаюсь в какой-то конкретной реализации.
Я предполагаю, что ваше доказательство того, что значение не может быть отрицательным, не подвержено ошибкам с плавающей запятой.Например, вычисления по линиям 1/2.0 - 1/3.0 - 1/6.0
или 0.4 - 0.2 - 0.2
могут привести к положительным или отрицательным значениям, если ошибки накапливаются, а не отменяются, поэтому, вероятно, ничего подобного не происходит.Единственным реальным использованием теста с плавающей точкой на равенство с 0 является проверка того, назначен ли вам литерал 0
.Или результат какого-либо другого вычисления гарантированно приведет к результату 0
в float
, но это может быть хитрым.