2015-05-10 3 views
1

Я просто пытаюсь получить вывод из цикла FOR, где инициализированное значение i выполнено итерировано более 3 раз.Итерация цикла цикла не работает

remainder = 0.33F; 

for (float i = 0; i < 1.00F; i += remainder) 
{ 
    Debug.Log(i); 
} 

Это дает выход, как i = 0, i = 0,33 и i = 0,66. Почему я не получаю i = 0.99?

+0

тогда как это сделать, чтобы получить все нужные значения переменной «i»? – Daqs

+1

Я отозвал закрытое голосование. В общем случае неточность с плавающей запятой приведет к сбою в цикле. В этом случае, где остаток = 0,33, это не может произойти, я думаю. –

+2

Небольшие корректировки синтаксиса, но работает просто отлично ... https://dotnetfiddle.net/JsU2Yu – Shar1er80

ответ

1

Because float point arithmetic isn't precise, and shouldn't expected to be.

Точное объяснение этой конкретной проблемы будет включать в себя подробную информацию о том, как поплавки хранимая в памяти в C# VM, и как это отличается от компилятора Microsoft и компилятор Mono, и как вы можете получить разные результаты, если вы построенный на iOS, до и после IL2CPP.

Однако я не думаю, что вам нужна вся эта информация, и, честно говоря, я слишком ленив, чтобы копать эту глубину. Подобно общему правилу, полагайтесь на арифметику с плавающей точкой, чтобы быть ненадежной и неточной.

Смежные вопросы