Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.01.2015, 18:20
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 1  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
По умолчанию Замена Number uint.

Я тут подумал, и снова подумал, и пришёл к мысли, что вычисления с плавающей запятой довольно абстрактны и неточны. Но что, если попробовать вырваться из этого "волнистого" "приблизительно равно"?

Итак, в чём суть. Определить на уровне пакета ассоц. массив юинтов, которые будут хранить значения от 0 до единицы пропорционально uint от 0 до uint.MAX_VALUE(типа обычной дроби вместо десятичной), и вместо переменных, доставать значения по ключу в юинтах.

И при вычислениях делить на uint.MAX_VALUE для получения значения с плавающей запятой(например, для скейла), хотя, думаю, лучше вместо скейла дёргать ширину, для получения найточнейшего результата.
В итоге мы получаем обычную дробь, и операции можем производить исключительно с числителем.
Но разве это нам мешает вычислять, к примеру, положение объекта внутри другого объекта, и делать относительные итерации числителя(например, перемещение на 10 процентов -

Код AS3:
vars.movement += uint.MAX_VALUE / 10;
при этом замечательную особенность обнаружил, когда попытался сделать следующее:

Код AS3:
var somevar:uint = uint.MAX_VALUE + 1;
trace(somevar); //0
Код AS3:
var somevar:uint = uint.MAX_VALUE + 2;
trace(somevar); //1
Код AS3:
var somevar:uint = uint.MAX_VALUE + 3;
trace(somevar); //2
Выходит, за границы объекта мы выйти не сможем никак!
Я почти уверен, что сейчас придёт nubideus и разочарует меня.
А теперь вопрос - почему не использовать инты и не проводить все вычисления с подобными дробями?

Единственное, что я заметил -
Код AS3:
var somevar:uint = -1;
trace(somevar); // выдаёт число uint.MAX_VALUE, НО бросает варнинг. Почти уверен, вылазит ошибка. Это так?
Если это так, то это превратит весь код в набор трай-кетчей, дабы предотвратить выброс ошибок...
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 25.01.2015 в 19:35.
Старый 25.01.2015, 18:56
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
uint - это число от 0 и выше. Если ты задаешь ему -1, то оно превратиться в 4294967295
__________________
Марк Tween

Старый 25.01.2015, 18:59
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 3  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Цитата:
Сообщение от in4core Посмотреть сообщение
uint - это число от 0 и выше. Если ты задаешь ему -1, то оно превратиться в 4294967295
Разумеется, именно это и хорошо, когда элемент достигнет края экрана и попытается его перешагнуть(от значения отнимется другое) он окажется с другой стороны.
Но мне не нравится варнинг, который мне бросил FD:

Код:
C:\Users\SuriTheAngel\Documents\DragonWorld\src\com\dragonworld\Main.as(95): col: 8 Warning: Negative value used where a uint (non-negative) value is expected.
Не возникнет ли ошибки в рантайме?

UPD:
Ага... разобрался. Варнинг не бросается, если делать вот так
Код AS3:
var somevar:uint = 0;
somevar --;
trace(somevar);//4294967295 ( == uint.MAX_VALUE)
Отлично, в таком случае дайте мне повод, чтобы не использовать подобную систему.

Добавлено через 43 минуты
Конечно, это первое, что пришло в голову, однако если у вас есть свои варианты, предлагайте
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 25.01.2015 в 19:43.
Старый 25.01.2015, 23:08
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 4  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Есть такой класс - Math
И у него есть несколько интересных методов:
Код AS3:
Math.round(player.x); // Целое округлённое
Math.floor(player.x); // Целое без дробной
Math.min(sceneWidth, player.x); // Не уйти за правый экран
Math.max(0, player.x); // Не уйти за левый экран
__________________
Дети не должны знать о своих родителях

Старый 26.01.2015, 00:29
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 5  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Tails, замечательно выходит.
Я не раз слышал о погрешностях чисел с плавающей запятой.
И все советовали использовать int для вычислений, где нужна точность.
Но я вот не могу придумать, как сделать универсальное решение...
__________________
There is no thing in this world that is not simple.

Старый 26.01.2015, 14:42
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 6  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
Цитата:
вычисления с плавающей запятой довольно абстрактны и неточны
Цитата:
И все советовали использовать int для вычислений, где нужна точность.
ой это такой вздор, double(Number) - 64 бита, int - 32 бита.

Цитата:
замечательную особенность
называется переполнение типа
Цитата:
var somevar:uint = -1;
uint(-1) или -1 >>> 0 - называется явное и неявное приведение типа

Цитата:
почему не использовать инты и не проводить все вычисления с подобными дробями?
Цитата:
дайте мне повод, чтобы не использовать подобную систему
заменив double на int точность может только уменьшиться, а код запутаться.

SuriTheAngel, а зачем тебе?

Старый 26.01.2015, 23:10
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 7  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Цитата:
SuriTheAngel, а зачем тебе?
Стремление к идеальному. Не понимаю, ведь уже какое поколение компьютеров, а до сих пор есть какая-то неточность в рассчётах. Или рассчёты станут идеально точными только на квантовом писи?

Ну, а вдруг мне придёт в голову моделировать физику(не механику движения, а именно физику), ну там к примеру, мне уже пришло в голову моделировать молекулярные структуры для развлечения.
Хочу закрепить школьный материал таким образом)

Поэтому неточность и погрешность мне не даёт покоя.
__________________
There is no thing in this world that is not simple.

Старый 27.01.2015, 01:24
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 8  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Вы решаете надуманную несуществующую проблему?
__________________
местонахождение

Старый 27.01.2015, 02:07
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 9  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Цитата:
Сообщение от СлаваRa Посмотреть сообщение
Вы решаете надуманную несуществующую проблему?
Да что-то с программированием в последнее время ваще нет проблем, вот и решил решить себе надуманную проблему... Нет, скорее задачу.
А ещё точнее, я хотел услышать, что думают другие по этому поводу. Вдруг, до меня придумали какое-то решение.

Ну окей, раз все пользуются Number и всем норм - то выходит, что задача действительно надуманная.
Спасибо всем за ответы.
__________________
There is no thing in this world that is not simple.

Старый 27.01.2015, 09:47
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 10  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
Цитата:
надуманную несуществующую проблему
деньги не считают в double потому что так прикольней?

SuriTheAngel, ну допустим будут у тебя более точные числа. есть другая проблема - время.
в копутерах можно скалькулировать только одно конкретное состояние одновременно, т.е. фрагментами. а в реальности все идет с бесконечной плавностью.

делай нейросети

Создать новую тему Ответ Часовой пояс GMT +4, время: 03:46.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.