Unity 2017 против Unity 5.x "поплавок" отличается - PullRequest
0 голосов
/ 24 мая 2018
Debug.Log((int)(4.2f * 10.0f));

Результат: 41 (в Unity 2017.2.1p4)

Результат: 42 (в Unity 5.4.3p4)

почему он отличается ??

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Точный результат произведения (одинарной точности) числа с плавающей точкой 4.2f и 10.f равен

41.9999980926513671875

Ближайший тип с плавающей точкой к этому точному результату равен 42.0f

Но этоточный результат соответствует двойной точности, поэтому, если когда-либо выражение вычисляется с одинарной точностью, оно напечатает 42, но если оно будет оценено с двойной точностью, то будет напечатано 41.

IOW, выражение может бытьраскладывается на:

x = 4.2f;
x = x * 10.0f;
Debug.Log((int)(x));

Если компилятор решил сохранить одинарную точность x, он напечатает 42, но если он решил оценить x с двойной точностью, он напечатает 41.

0 голосов
/ 24 мая 2018

Числа с плавающей точкой используют приблизительное представление, а математика с плавающей точкой не является детерминированной.Один и тот же расчет может дать разные результаты, особенно на разных компьютерах, архитектурах или настройках компилятора и оптимизации.

Таким образом, вполне вероятно, что есть различия в настройках компилятора и оптимизации между Unity 5.4.3p4 и Unity 2017.2.1p4.

В вашем примере 4.2f * 10.0f может привести к различным значениям, таким как 41.9999998f или 42.0000002f, которые преобразуются в целое число как 41 или 42 соответственно.

Для получения дополнительной информации,см. эти сообщения:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...