Я только что заметил, что следующий код возвращает true:
Mathf.Approximately(0.0f, float.Epsilon); // true
Я прочитал документацию Mathf.Approximately , и там говорится:
Приблизительно () сравнивает два числа с плавающей точкой и возвращает true, если они находятся в пределах небольшого значения (Epsilon) друг от друга.
И Mathf.Epsilon Документация гласит, что:
- anyValue + Epsilon = anyValue
- anyValue - Epsilon = anyValue
- 0 + Epsilon = Epsilon
- 0 - Epsilon = -Epsilon
В результате я запустил следующий код, ожидая, что он будет false
, но он также возвращает true
.
Mathf.Approximately(0.0f, 2.0f * float.Epsilon); // true
Кстати:
Mathf.Approximately(0.0f, 2.0f * float.Epsilon); // true
Mathf.Approximately(0.0f, 3.0f * float.Epsilon); // true
Mathf.Approximately(0.0f, 4.0f * float.Epsilon); // true
Mathf.Approximately(0.0f, 5.0f * float.Epsilon); // true
Mathf.Approximately(0.0f, 6.0f * float.Epsilon); // true
Mathf.Approximately(0.0f, 7.0f * float.Epsilon); // true
Mathf.Approximately(0.0f, 8.0f * float.Epsilon); // false
Mathf.Approximately(0.0f, 9.0f * float.Epsilon); // false
В: На основании этих доказательств могу ли я с уверенностью сказать, что Mathf.Approximately
неправильно реализован в соответствии с его документацией *?
(*и в результате я должен перейти к различным решениям, таким как решение в функциях сравнения с плавающей запятой для C # )