Гарантируется ли (float) integer == integer равным в C #?

Хотя "мы все знаем" тотx == y может быть проблематично, гдеx а такжеy являются значениями с плавающей точкой, этот вопрос немного более конкретен:

int x = random.Next(SOME_UPPER_LIMIT);
float r = x;
// Is the following ALWAYS true?    
r == x

Теперь, так какrange of float of намного больше, чем у целых чисел (но точность недостаточна для уникального представления целых чисел по краям), было бы неплохо, если бы ответы на этот вопросalso адресованы какие значенияx Выше может быть гарантировано, если это вообще может быть гарантировано.

В настоящее время мой кодis делая это предположение (для относительно небольших значений x) - я хотел бы убедиться, что меня не укусят :)

Это не удастся при & quot; не равно: 16777217 & quot; (cast float - & gt; int):

for (int i = 0; i < int.MaxValue; i++) {
   float f = i;
   if ((int)f != i) throw new Exception("not equal " + i);
}

Этот похожий код не потерпит неудачу (только int -> float); тем не мение,due to loss in the conversion, there are several floats that can "equal" the same integerи может представлять скрытую ошибку:

for (int i = 0; i < int.MaxValue; i++) {
   float f = i;
   if (f != i) throw new Exception("not equal " + i);
}

Ответы на вопрос(5)

Ваш ответ на вопрос