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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.11.2013, 02:36
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 1  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
По умолчанию Вычитание нецелых чисел

Сначала задал вопрос в общем разделе, но прошло время и я склонился к мысли, что это уже для раздела связанного с кодом.
Простой пример - сделал я калькулятор или что то, что предназначено для счёта и пользователь начинает считать -
Код AS3:
var a:Number = 0.030000000000001137;
var b:Number = 0.03;
trace(a-b);//1.1379786002407855e-15
Почему результат 1.1379786002407855e-15 в место ожидаемого 0.000000000000001137.
Как мне получить ожидаемый результат? И это я измеряю таймер, в котором даже такие значения очень важны.
И округлять int, uint нельзя и RegExp тоже нельзя цифры резать... Как быть? я только обрадовался, что закончил
с плавностью и распределением скачков ( считал, что сегодня доведу до ума ), но а теперь я вообще не знаю, как это можно сделать.
И даже если перевести счёт в милисекунды ( без деления на тысячу ), тоже самое. Только выявить сложнее, но ошибка остается.

Добавлено через 7 минут
И программа воспринимает число 1.1379786002407855e-15 не как 0.000000000000001137, а как полтора.

Старый 04.11.2013, 06:15
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 2  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Цитата:
И даже если перевести счёт в милисекунды ( без деления на тысячу )
Ты в секундах считаешь??? О_о
А вопрос не возникал почему все функции работы с временем в интовых миллисекундах?

По твоему вопросу - ничего с этим не поделаешь. Нужна точность больше - умножай на 10-100-1000, но лучше в итоге прийти к работе с целыми.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 04.11.2013, 12:22
Anton Riot вне форума Посмотреть профиль Отправить личное сообщение для Anton Riot Посетить домашнюю страницу Anton Riot Найти все сообщения от Anton Riot
  № 3  
Ответить с цитированием
Anton Riot

Регистрация: Sep 2008
Адрес: Москва
Сообщений: 291
Отправить сообщение для Anton Riot с помощью ICQ
Цитата:
Сообщение от Akopalipsis Посмотреть сообщение
И программа воспринимает число 1.1379786002407855e-15 не как 0.000000000000001137, а как полтора.
1.1379786002407855e-15 = 0.0000000000000011379786002407855
Какие проблемы?

Добавлено через 6 минут
Цитата:
Сообщение от Akopalipsis Посмотреть сообщение
И округлять int, uint нельзя и RegExp тоже нельзя цифры резать...
Код AS3:
var a:Number = 0.030000000000001137;
var b:Number = 0.03;
var base:Number = 1000000000000000000;
var result:Number = Math.round((a-b)*base)/base)
Если вы делаете не гомеопатический калькулятор, такие порядки не должны быть важны. Если это случилось, то это означает, что логика не верна.

Старый 04.11.2013, 14:05
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 4  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
А вопрос не возникал почему все функции работы с временем в интовых миллисекундах?
То же самое происходит. Если не попасть под вот такой случай, то можно и не заметить, что это ошибка, а списать всё на EF. Но я зная о этой ошибке смотрю по другим значениям и получается тоже самое, только показания другие.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Akopalipsis, вам знакомо понятие "экспонента"?
Вот это число 1.1379786002407855e-15, совсем не полтора, как вам показалось

Старый 04.11.2013, 14:43
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 6  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
Akopalipsis, вам знакомо понятие "экспонента"?
Теоретически, а подумал я так из - за скачка который видно визуально в момент появления этого числа, даже не скачок а ускорение.

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

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Цитата:
Почему результат 1.1379786002407855e-15 в место ожидаемого 0.000000000000001137.
Потому что "числа с плавающей точкой" не зря так назвали
У первого числа точность намного выше, чем у второго. У второго точность всего 4 знака, а у первого 17. В данном случае в первом числе мантисса равна 11379786002407855, а во втором 0000000000000001137. Вы же не пишете целое число 2 как 0000000002, хотя в целом оба варианта правильные. Таким же образом экономится ограниченная память, которую отводят под число, опуская незначащие нули и заменяя их порядком числа в виде e-15 (то есть мантисса умноженная на десять в степени, которая указана после e, в данном случае мантисса умножить на десять в степени минус 15)

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

Старый 05.11.2013, 01:00
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 8  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
KumoKairo Спасибо за обьяснения!
Цитата:
Обычно на форум пишут в случае, когда неделя упорных поисков и проб не дают никаких результатов
Во первых - я не знал, что это называется мантисса, во вторых я много тут написал.. И решил, что лучше Вам сказать ещё раз - Спасибо! Надеюсь, что от двух спасибо Вам станет лучше и Вы снимете с меня обвинения за всю пошаговую инструкцию... форум!)

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Во первых - я не знал, что это называется мантисса
Akopalipsis, может Вы не поверите, но ответы на большинство Ваших вопросов, довольно просто гуглятся. Даже если это не будет первым результатом в поиске, все равно некоторые усилия, приложенные к поиску, точно дадут результаты. Советую открыть для себя ресурс stackoverflow.com
Наверное ни сколько не преувеличу, сказав, что это самый полезный ресурс для программиста. Там находятся ответы процентов на 95 всех вопросов, четко и без лишней воды.
Ну а по поводу мантиссы http://ru.wikipedia.org/wiki/%D0%A7%...82%D0%BE%D0%B9

п.с. Так же очень советую почитать книжку SCJP Sun Certified Programmer for Java 6. Книжка хоть и по джаве, но там очень подробно рассматриваются вопросы типа "как это работает?" почитав её, многое поймете и об ас3.
На русском этой книги не встречал, но, видимо это и не нужно, так как экзамен сам в любом случае только на английском.

Старый 05.11.2013, 11:14
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 10  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Akopalipsis, давно пора пройти ликбез. Курсы там каке-нибудь, можно онлайн, или просто почитать что-то отвлеченное от AS, ООП и прочей шняги. Потратьте недельку-другую-третью на основы: представление данных, работа с памятью, алгоритмы, библиотеки, девелоп-окружение (редакторы-компилеры-линкеры-дебуггеры). Незамутненное понятие обо всем таком может дать изучение основ Си, по крайней мере взять как отправную точку можно. Ибо оттуда многи ноги растут, сами увидите. Без обид .
Если решитесь, настоятельно рекомендую изучать это все под никсами. И настоятельно рекомендую консольный режим .

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

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

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


 


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


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