forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Стандарт процессора IEEE 754 (http://forum.boolean.name/showthread.php?t=18048)

Fockerian 02.04.2013 09:42

Стандарт процессора IEEE 754
 
Товарищи, подскажите пожалуйста как заставить работать сборку на Unity3d так, чтобы процессор расчитывал все числа с плавающей точкой (float) по стандарту IEEE 754? Заранее спасибо.

pax 02.04.2013 11:38

Ответ: Стандарт процессора IEEE 754
 
Что это за стандарт и чем он так хорош?

По вопросу: я думаю никак.

SBJoker 02.04.2013 12:10

Ответ: Стандарт процессора IEEE 754
 
Судя по всему это самый распространенный формат представления чисел с плавающей запятой. Поэтому встречный вопрос топик-стартеру: откуда информация что сейчас Юнити оперирует другим представлением?

(олсо поддержка на уровне процессора реализована, в случаях когда это не так, то идёт программная эмуляция)

Fockerian 02.04.2013 12:37

Ответ: Стандарт процессора IEEE 754
 
Цитата:

Сообщение от pax (Сообщение 256143)
Что это за стандарт и чем он так хорош?


C википедии:
Цитата:

IEEE 754 — широко распространённый стандарт формата представления чисел с плавающей точкой, используемый как в программных реализациях арифметических действий, так и во многих аппаратных (CPU и FPU) реализациях.
Чем он хорошо ? - При расчете числа с плавающей точкой (float) процессоры дают погрешность отличную друг от друга, но мне нужны одинаковые результаты на разных машинах. А стандарт IEEE 754 как раз таки стандартизирует расчет числа с плавающей точкой и разные процессоры работающие под этим стандартом будут давать идентичные результаты.

Fockerian 02.04.2013 12:49

Ответ: Стандарт процессора IEEE 754
 
Цитата:

Сообщение от SBJoker (Сообщение 256146)
Судя по всему это самый распространенный формат представления чисел с плавающей запятой. Поэтому встречный вопрос топик-стартеру: откуда информация что сейчас Юнити оперирует другим представлением?

(олсо поддержка на уровне процессора реализована, в случаях когда это не так, то идёт программная эмуляция)

Как я писал выше стандарт IEEE 754 дает возможность расчета Float на разных машинах с абсолютно одинаковой точностью,если Unity использует только его почему расчет Float на разных процессорах дает результаты отличные друг от друга? Эти данные я прочитал где то на официальном форуме юнити. Там ребята делали RTS сетевую. Друг другу через сервер они передавали только ввод,и симуляция игры шла у каждого на своей машине по отдельности. Они заметили, что позиции их юнитов после большого количества передвижений отличаются друг от друга. Копаясь в коде они пришли к выводу что виновато то самое число с плавающей точкой float,когда на разных процессорах шел расчет погрешность постепенно возрастала из за большого колличества умножений-делений-вычитаний float.

По поводу программной эмуляции, если ее реализовать расчет float будет осуществляться в десятки раз медленее чем если расчет будет идти на аппаратном уровне.

Поэтому единственный вариант решения проблемы с float который сейчас я вижу это заставить работать программно процессор по стандарту IEEE 754.

SBJoker 02.04.2013 12:51

Ответ: Стандарт процессора IEEE 754
 
Это всё понятно, но процессоры считают так как реализован их FPU. Некоторые языки позволяют использовать программную поддержку стандарта если он не поддерживается процессором. Однако производительность таких расчётов сильно падает. Заставить процессор работать с данными которые он не поддерживает невозможно. В этом вся суть FPU, он заранее спроектирован физически под определенный стандарт(ы).

А ребятки с RTS дети несмышленые, передавать нужно время от времени корректирующие данные в абсолютных единицах. Симуляцию клиент отрабатывает сам а сервер лишь корректирует состояние объектов во времени.

Лучшим решением будет использование чисел двойной точности если важен точный результат на любой платформе.

jimon 02.04.2013 13:27

Ответ: Стандарт процессора IEEE 754
 
используй реализацию float с фиксированной запятой на базе int, так делают когда нужно обеспечить одинаковый результат во всех средах исполнения, и так сделаны большинство онлайн игр

IEEE 754 ничего тебе не даст, потому что всё и так на нем работает

Fockerian 02.04.2013 14:26

Ответ: Стандарт процессора IEEE 754
 
Цитата:

Сообщение от SBJoker (Сообщение 256149)

А ребятки с RTS дети несмышленые, передавать нужно время от времени корректирующие данные в абсолютных единицах. Симуляцию клиент отрабатывает сам а сервер лишь корректирует состояние объектов во времени.

При синхронизации 8000 юнитов не хватит ширины канала интернет соеденения.

Мне нужно чтобы можно было пользоваться полным функционалом програмирования на Unity, а там почти все на float. Я читал, что супрем командер сделали с использованием float благодаря тому,что задействовали стандарт IEEE 754.

IamNoExist 02.04.2013 14:37

Ответ: Стандарт процессора IEEE 754
 
Цитата:

Сообщение от jimon (Сообщение 256151)
используй реализацию float с фиксированной запятой на базе int, так делают когда нужно обеспечить одинаковый результат во всех средах исполнения, и так сделаны большинство онлайн игр

Большинство, но не все, например Defcon и Supreme Commander используют именно float заставляя FPU использовать стандарт IEEE 754.

Смысл в том, чтобы стандартные функции Unity могли отрабатывать с float одинаково на каждой машине, а не переписывать всю арифметику для работы с фиксированной запятой.

Цитата:

Сообщение от jimon (Сообщение 256151)
IEEE 754 ничего тебе не даст, потому что всё и так на нем работает

Тоесть выходит что вычисления будут и так одинаковыми на любом процессоре?

jimon 02.04.2013 15:48

Ответ: Стандарт процессора IEEE 754
 
их просто два : IEEE 754-1985 и IEEE 754-2008

Цитата:

The IEEE 754-1985 allowed many variations in implementations (such as the encoding of some values and the detection of certain exceptions). IEEE 754-2008 has tightened up many of these, but a few variations still remain (especially for binary formats). The reproducibility clause recommends that language standards should provide a means to write reproducible programs (i.e., programs that will produce the same result in all implementations of a language), and describes what needs to be done to achieve reproducible results.
собственно сам стандарт не подразумевает что результаты вычислений будут одинаковыми на любом вычислителе, так что забейте


[ultra_trollmode]
вы же юнити девелоперы на c# или еще чего там, извините, а вы не ох*ели такие вопросы задавать ? еще не сделали плагина в сторе лол ?

пишите на c++ и будет вам счастье =)
[/ultra_trollmode]

Fockerian 02.04.2013 17:43

Ответ: Стандарт процессора IEEE 754
 
Ну как тогда люди делают RTS сетевые при расчете float аппаратно?

pax 02.04.2013 17:48

Ответ: Стандарт процессора IEEE 754
 
RTS это же поинт энд клик - щелкнул по цели, передал координаты. Нахрен передавать управление?

Fockerian 02.04.2013 20:27

Ответ: Стандарт процессора IEEE 754
 
Цитата:

Сообщение от pax (Сообщение 256171)
RTS это же поинт энд клик - щелкнул по цели, передал координаты. Нахрен передавать управление?

Вы представляете что такое передать по сети кординаты 8000 юнитов 8 игрокам?

pax 02.04.2013 20:33

Ответ: Стандарт процессора IEEE 754
 
Цитата:

Сообщение от Fockerian (Сообщение 256177)
Вы представляете что такое передать по сети кординаты 8000 юнитов 8 игрокам?

Такой алгоритм:
1. Инициализация - передача всем игрокам координат всех юнитов игроков.
2. Выделение юнита мышкой.
3. Указание юниту цели (клик мышкой) - координат (цели) и передача этих координат для этого юнита по сети.
4. профит


UPD: вы еще скажите что у вас на каждом компьютере игра с одинаковой скоростью работает чтобы считать смещения и суммировать.

Fockerian 02.04.2013 21:17

Ответ: Стандарт процессора IEEE 754
 
Цитата:

Сообщение от pax (Сообщение 256179)
Такой алгоритм:
1. Инициализация - передача всем игрокам координат всех юнитов игроков.
2. Выделение юнита мышкой.
3. Указание юниту цели (клик мышкой) - координат (цели) и передача этих координат для этого юнита по сети.
4. профит


UPD: вы еще скажите что у вас на каждом компьютере игра с одинаковой скоростью работает чтобы считать смещения и суммировать.


Согласно вашей логике кто должен просчитывать игровой мир (перемещение,удаление,добавление юнитов ) ?


Часовой пояс GMT +4, время: 17:44.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot