|
Общие вопросы вопросы не попадающие ни в один из доступных разделов |
02.04.2013, 09:42
|
#1
|
Оператор ЭВМ
Регистрация: 10.07.2011
Сообщений: 30
Написано одно полезное сообщение
|
Стандарт процессора IEEE 754
Товарищи, подскажите пожалуйста как заставить работать сборку на Unity3d так, чтобы процессор расчитывал все числа с плавающей точкой (float) по стандарту IEEE 754? Заранее спасибо.
|
(Offline)
|
|
02.04.2013, 11:38
|
#2
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Стандарт процессора IEEE 754
Что это за стандарт и чем он так хорош?
По вопросу: я думаю никак.
|
(Offline)
|
|
02.04.2013, 12:10
|
#3
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Стандарт процессора IEEE 754
Судя по всему это самый распространенный формат представления чисел с плавающей запятой. Поэтому встречный вопрос топик-стартеру: откуда информация что сейчас Юнити оперирует другим представлением?
(олсо поддержка на уровне процессора реализована, в случаях когда это не так, то идёт программная эмуляция)
__________________
|
(Offline)
|
|
02.04.2013, 12:37
|
#4
|
Оператор ЭВМ
Регистрация: 10.07.2011
Сообщений: 30
Написано одно полезное сообщение
|
Ответ: Стандарт процессора IEEE 754
Сообщение от pax
Что это за стандарт и чем он так хорош?
|
C википедии:
IEEE 754 — широко распространённый стандарт формата представления чисел с плавающей точкой, используемый как в программных реализациях арифметических действий, так и во многих аппаратных (CPU и FPU) реализациях.
|
Чем он хорошо ? - При расчете числа с плавающей точкой (float) процессоры дают погрешность отличную друг от друга, но мне нужны одинаковые результаты на разных машинах. А стандарт IEEE 754 как раз таки стандартизирует расчет числа с плавающей точкой и разные процессоры работающие под этим стандартом будут давать идентичные результаты.
|
(Offline)
|
|
02.04.2013, 12:49
|
#5
|
Оператор ЭВМ
Регистрация: 10.07.2011
Сообщений: 30
Написано одно полезное сообщение
|
Ответ: Стандарт процессора IEEE 754
Сообщение от SBJoker
Судя по всему это самый распространенный формат представления чисел с плавающей запятой. Поэтому встречный вопрос топик-стартеру: откуда информация что сейчас Юнити оперирует другим представлением?
(олсо поддержка на уровне процессора реализована, в случаях когда это не так, то идёт программная эмуляция)
|
Как я писал выше стандарт IEEE 754 дает возможность расчета Float на разных машинах с абсолютно одинаковой точностью,если Unity использует только его почему расчет Float на разных процессорах дает результаты отличные друг от друга? Эти данные я прочитал где то на официальном форуме юнити. Там ребята делали RTS сетевую. Друг другу через сервер они передавали только ввод,и симуляция игры шла у каждого на своей машине по отдельности. Они заметили, что позиции их юнитов после большого количества передвижений отличаются друг от друга. Копаясь в коде они пришли к выводу что виновато то самое число с плавающей точкой float,когда на разных процессорах шел расчет погрешность постепенно возрастала из за большого колличества умножений-делений-вычитаний float.
По поводу программной эмуляции, если ее реализовать расчет float будет осуществляться в десятки раз медленее чем если расчет будет идти на аппаратном уровне.
Поэтому единственный вариант решения проблемы с float который сейчас я вижу это заставить работать программно процессор по стандарту IEEE 754.
|
(Offline)
|
|
02.04.2013, 12:51
|
#6
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Стандарт процессора IEEE 754
Это всё понятно, но процессоры считают так как реализован их FPU. Некоторые языки позволяют использовать программную поддержку стандарта если он не поддерживается процессором. Однако производительность таких расчётов сильно падает. Заставить процессор работать с данными которые он не поддерживает невозможно. В этом вся суть FPU, он заранее спроектирован физически под определенный стандарт(ы).
А ребятки с RTS дети несмышленые, передавать нужно время от времени корректирующие данные в абсолютных единицах. Симуляцию клиент отрабатывает сам а сервер лишь корректирует состояние объектов во времени.
Лучшим решением будет использование чисел двойной точности если важен точный результат на любой платформе.
__________________
|
(Offline)
|
|
02.04.2013, 13:27
|
#7
|
|
Ответ: Стандарт процессора IEEE 754
используй реализацию float с фиксированной запятой на базе int, так делают когда нужно обеспечить одинаковый результат во всех средах исполнения, и так сделаны большинство онлайн игр
IEEE 754 ничего тебе не даст, потому что всё и так на нем работает
|
|
|
Сообщение было полезно следующим пользователям:
|
|
02.04.2013, 14:26
|
#8
|
Оператор ЭВМ
Регистрация: 10.07.2011
Сообщений: 30
Написано одно полезное сообщение
|
Ответ: Стандарт процессора IEEE 754
Сообщение от SBJoker
А ребятки с RTS дети несмышленые, передавать нужно время от времени корректирующие данные в абсолютных единицах. Симуляцию клиент отрабатывает сам а сервер лишь корректирует состояние объектов во времени.
|
При синхронизации 8000 юнитов не хватит ширины канала интернет соеденения.
Мне нужно чтобы можно было пользоваться полным функционалом програмирования на Unity, а там почти все на float. Я читал, что супрем командер сделали с использованием float благодаря тому,что задействовали стандарт IEEE 754.
|
(Offline)
|
|
02.04.2013, 14:37
|
#9
|
AnyKey`щик
Регистрация: 02.04.2013
Сообщений: 4
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Стандарт процессора IEEE 754
Сообщение от jimon
используй реализацию float с фиксированной запятой на базе int, так делают когда нужно обеспечить одинаковый результат во всех средах исполнения, и так сделаны большинство онлайн игр
|
Большинство, но не все, например Defcon и Supreme Commander используют именно float заставляя FPU использовать стандарт IEEE 754.
Смысл в том, чтобы стандартные функции Unity могли отрабатывать с float одинаково на каждой машине, а не переписывать всю арифметику для работы с фиксированной запятой.
Сообщение от jimon
IEEE 754 ничего тебе не даст, потому что всё и так на нем работает
|
Тоесть выходит что вычисления будут и так одинаковыми на любом процессоре?
|
(Offline)
|
|
02.04.2013, 15:48
|
#10
|
|
Ответ: Стандарт процессора 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]
|
|
|
Эти 2 пользователя(ей) сказали Спасибо за это полезное сообщение:
|
|
02.04.2013, 17:43
|
#11
|
Оператор ЭВМ
Регистрация: 10.07.2011
Сообщений: 30
Написано одно полезное сообщение
|
Ответ: Стандарт процессора IEEE 754
Ну как тогда люди делают RTS сетевые при расчете float аппаратно?
|
(Offline)
|
|
02.04.2013, 17:48
|
#12
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Стандарт процессора IEEE 754
RTS это же поинт энд клик - щелкнул по цели, передал координаты. Нахрен передавать управление?
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
|
|
02.04.2013, 20:27
|
#13
|
Оператор ЭВМ
Регистрация: 10.07.2011
Сообщений: 30
Написано одно полезное сообщение
|
Ответ: Стандарт процессора IEEE 754
Сообщение от pax
RTS это же поинт энд клик - щелкнул по цели, передал координаты. Нахрен передавать управление?
|
Вы представляете что такое передать по сети кординаты 8000 юнитов 8 игрокам?
|
(Offline)
|
|
02.04.2013, 20:33
|
#14
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Стандарт процессора IEEE 754
Сообщение от Fockerian
Вы представляете что такое передать по сети кординаты 8000 юнитов 8 игрокам?
|
Такой алгоритм:
1. Инициализация - передача всем игрокам координат всех юнитов игроков.
2. Выделение юнита мышкой.
3. Указание юниту цели (клик мышкой) - координат (цели) и передача этих координат для этого юнита по сети.
4. профит
UPD: вы еще скажите что у вас на каждом компьютере игра с одинаковой скоростью работает чтобы считать смещения и суммировать.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
02.04.2013, 21:17
|
#15
|
Оператор ЭВМ
Регистрация: 10.07.2011
Сообщений: 30
Написано одно полезное сообщение
|
Ответ: Стандарт процессора IEEE 754
Сообщение от pax
Такой алгоритм:
1. Инициализация - передача всем игрокам координат всех юнитов игроков.
2. Выделение юнита мышкой.
3. Указание юниту цели (клик мышкой) - координат (цели) и передача этих координат для этого юнита по сети.
4. профит
UPD: вы еще скажите что у вас на каждом компьютере игра с одинаковой скоростью работает чтобы считать смещения и суммировать.
|
Согласно вашей логике кто должен просчитывать игровой мир (перемещение,удаление,добавление юнитов ) ?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 23:44.
|