float k = 500f;
float k2 =k- 1e-5f; // 0.00001F
Console.WriteLine(k);
Console.WriteLine(k2);
Console.WriteLine(k2==k); // TRUE
Почему вычитание не сработало?
При этом в интерактивном окне, там false показывает.
Мантиса 23 бита имеет, значит число наверное 8 млн, почему тогда 10к значное значение с ошибкой выходит.
Я вообще не понимаю как исправить алгоритм что бы он работал.
Как получить 499.999999 ?
Отнимать 1e-4f? А гарантия есть что при других значениях все корректно будет. Почему в документации ни где не найти КАКОЕ это число, пишут 6 знаков, но вот 5 и не работает, обычно в 100% всех кодов при сравнение 2 float, есть такое
float epsilon=1-e5;
if(MathF.Abs(a-b)<epsilon){ }
Но вот в примере выше этот код, который присутствует в 1000000000000% всех тестов, всех учебниках, всех кодах не работает.
В добавок диапазон значений в задаче может быть от 0-1, и 0.0001 может быть выше некоторого шага, поэтому мне точно нужно минимум 0. 0 0 0 0 1 знач отнимать.