Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Общие вопросы

Общие вопросы вопросы не попадающие ни в один из доступных разделов

Ответ
 
Опции темы
Старый 02.04.2013, 09:42   #1
Fockerian
Оператор ЭВМ
 
Регистрация: 10.07.2011
Сообщений: 30
Написано одно полезное сообщение
Стандарт процессора IEEE 754

Товарищи, подскажите пожалуйста как заставить работать сборку на Unity3d так, чтобы процессор расчитывал все числа с плавающей точкой (float) по стандарту IEEE 754? Заранее спасибо.
(Offline)
 
Ответить с цитированием
Старый 02.04.2013, 11:38   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Стандарт процессора IEEE 754

Что это за стандарт и чем он так хорош?

По вопросу: я думаю никак.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 02.04.2013, 12:10   #3
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Стандарт процессора IEEE 754

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

(олсо поддержка на уровне процессора реализована, в случаях когда это не так, то идёт программная эмуляция)
__________________
(Offline)
 
Ответить с цитированием
Старый 02.04.2013, 12:37   #4
Fockerian
Оператор ЭВМ
 
Регистрация: 10.07.2011
Сообщений: 30
Написано одно полезное сообщение
Ответ: Стандарт процессора IEEE 754

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

C википедии:
IEEE 754 — широко распространённый стандарт формата представления чисел с плавающей точкой, используемый как в программных реализациях арифметических действий, так и во многих аппаратных (CPU и FPU) реализациях.
Чем он хорошо ? - При расчете числа с плавающей точкой (float) процессоры дают погрешность отличную друг от друга, но мне нужны одинаковые результаты на разных машинах. А стандарт IEEE 754 как раз таки стандартизирует расчет числа с плавающей точкой и разные процессоры работающие под этим стандартом будут давать идентичные результаты.
(Offline)
 
Ответить с цитированием
Старый 02.04.2013, 12:49   #5
Fockerian
Оператор ЭВМ
 
Регистрация: 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
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Стандарт процессора IEEE 754

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

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

Лучшим решением будет использование чисел двойной точности если важен точный результат на любой платформе.
__________________
(Offline)
 
Ответить с цитированием
Старый 02.04.2013, 13:27   #7
jimon
 
Сообщений: n/a
Ответ: Стандарт процессора IEEE 754

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

IEEE 754 ничего тебе не даст, потому что всё и так на нем работает
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Mr_F_ (02.04.2013)
Старый 02.04.2013, 14:26   #8
Fockerian
Оператор ЭВМ
 
Регистрация: 10.07.2011
Сообщений: 30
Написано одно полезное сообщение
Ответ: Стандарт процессора IEEE 754

Сообщение от SBJoker Посмотреть сообщение

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

Мне нужно чтобы можно было пользоваться полным функционалом програмирования на Unity, а там почти все на float. Я читал, что супрем командер сделали с использованием float благодаря тому,что задействовали стандарт IEEE 754.
(Offline)
 
Ответить с цитированием
Старый 02.04.2013, 14:37   #9
IamNoExist
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
jimon
 
Сообщений: n/a
Ответ: Стандарт процессора 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 пользователя(ей) сказали Спасибо за это полезное сообщение:
Mr_F_ (02.04.2013), SBJoker (02.04.2013)
Старый 02.04.2013, 17:43   #11
Fockerian
Оператор ЭВМ
 
Регистрация: 10.07.2011
Сообщений: 30
Написано одно полезное сообщение
Ответ: Стандарт процессора IEEE 754

Ну как тогда люди делают RTS сетевые при расчете float аппаратно?
(Offline)
 
Ответить с цитированием
Старый 02.04.2013, 17:48   #12
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Стандарт процессора IEEE 754

RTS это же поинт энд клик - щелкнул по цели, передал координаты. Нахрен передавать управление?
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
Arton (02.04.2013), Nex (02.04.2013), SBJoker (03.04.2013)
Старый 02.04.2013, 20:27   #13
Fockerian
Оператор ЭВМ
 
Регистрация: 10.07.2011
Сообщений: 30
Написано одно полезное сообщение
Ответ: Стандарт процессора IEEE 754

Сообщение от pax Посмотреть сообщение
RTS это же поинт энд клик - щелкнул по цели, передал координаты. Нахрен передавать управление?
Вы представляете что такое передать по сети кординаты 8000 юнитов 8 игрокам?
(Offline)
 
Ответить с цитированием
Старый 02.04.2013, 20:33   #14
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Стандарт процессора IEEE 754

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


UPD: вы еще скажите что у вас на каждом компьютере игра с одинаковой скоростью работает чтобы считать смещения и суммировать.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
SBJoker (03.04.2013)
Старый 02.04.2013, 21:17   #15
Fockerian
Оператор ЭВМ
 
Регистрация: 10.07.2011
Сообщений: 30
Написано одно полезное сообщение
Ответ: Стандарт процессора IEEE 754

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


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

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


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com