Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вычитание нецелых чисел (http://www.flasher.ru/forum/showthread.php?t=204579)

Akopalipsis 04.11.2013 02:36

Вычитание нецелых чисел
 
Сначала задал вопрос в общем разделе, но прошло время и я склонился к мысли, что это уже для раздела связанного с кодом.
Простой пример - сделал я калькулятор или что то, что предназначено для счёта и пользователь начинает считать -
Код 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, а как полтора.

Dukobpa3 04.11.2013 06:15

Цитата:

И даже если перевести счёт в милисекунды ( без деления на тысячу )
Ты в секундах считаешь??? О_о
А вопрос не возникал почему все функции работы с временем в интовых миллисекундах?

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

Anton Riot 04.11.2013 12:22

Цитата:

Сообщение от Akopalipsis (Сообщение 1151161)
И программа воспринимает число 1.1379786002407855e-15 не как 0.000000000000001137, а как полтора.

1.1379786002407855e-15 = 0.0000000000000011379786002407855
Какие проблемы?

Добавлено через 6 минут
Цитата:

Сообщение от Akopalipsis (Сообщение 1151161)
И округлять 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)

Если вы делаете не гомеопатический калькулятор, такие порядки не должны быть важны. Если это случилось, то это означает, что логика не верна.

Akopalipsis 04.11.2013 14:05

Цитата:

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

caseyryan 04.11.2013 14:21

Akopalipsis, вам знакомо понятие "экспонента"?
Вот это число 1.1379786002407855e-15, совсем не полтора, как вам показалось

Akopalipsis 04.11.2013 14:43

Цитата:

Akopalipsis, вам знакомо понятие "экспонента"?
Теоретически, а подумал я так из - за скачка который видно визуально в момент появления этого числа, даже не скачок а ускорение.

KumoKairo 05.11.2013 00:47

Цитата:

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

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

Akopalipsis 05.11.2013 01:00

KumoKairo Спасибо за обьяснения!
Цитата:

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

caseyryan 05.11.2013 10:06

Цитата:

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

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

alexcon314 05.11.2013 11:14

Akopalipsis, давно пора пройти ликбез. Курсы там каке-нибудь, можно онлайн, или просто почитать что-то отвлеченное от AS, ООП и прочей шняги. Потратьте недельку-другую-третью на основы: представление данных, работа с памятью, алгоритмы, библиотеки, девелоп-окружение (редакторы-компилеры-линкеры-дебуггеры). Незамутненное понятие обо всем таком может дать изучение основ Си, по крайней мере взять как отправную точку можно. Ибо оттуда многи ноги растут, сами увидите. Без обид :).
Если решитесь, настоятельно рекомендую изучать это все под никсами. И настоятельно рекомендую консольный режим :).

Akopalipsis 05.11.2013 14:10

Цитата:

представление данных, работа с памятью, алгоритмы, библиотеки, девелоп-окружение (редакторы-компилеры-линкеры-дебуггеры)
я не могу сказать, что знаю всё, но если начать перечислять, что я читал и что я знаю, по крайней мере получится не мало.
Цитата:

Akopalipsis, может Вы не поверите, но ответы на большинство Ваших вопросов, довольно просто гуглятся.
Когда знаешь ответ на вопрос, то гуглится с первого раза. И я прежде чем спрашивать всегда ищу в гугле
от куда и узнал о stackoverflow.com. Спрашивал я там только один раз, так как гугл переводчик не идеален. Если я нахожу ответ на вопрос, но не уверен, что понял его на девяносто девять процентов, то я переспрашиваю. Когда я слышу незнакомые слова, то я то же естественно иду в гугл и смотрю. И в большинстве случаев мои вопросы не вопросы, а просьба поделится опытом и сказать как лучше.
За полгода чтения форума у меня складывается не однозначное мнение, то же без обид, но мне кажется, что из-за своей жадности и не желания поделится полученной информации, многие от этого страдают.
Не один раз я уже видел, когда форумчанен с датой регистрации совпадающей почти с моей датой рождения, вступая в спор, оказывается не прав.
И я не когда не обижаюсь на чужое мнение или советы, я даже рад им.
И я не перестану повторять - если человека, который уже работает или знает Оочень много и у которого дата регистрации меньше пол года или чуть более наводит только на одну мысль - у него был ещё акк и когда он начал заниматься в серьёз, то завел новый, что бы не показывать, какие у него у самого были глупые вопросы.

caseyryan 05.11.2013 15:45

Цитата:

что из-за своей жадности и не желания поделится полученной информации, многие от этого страдают.
Я бы сказал по-другому, большинство вопросов просто настолько заезжены, что часто даже не хочется ничего писать в ответ, так как такие темы обсуждаются чуть ли не каждый день (не конкретно про Ваши темы, а в целом).

Akopalipsis 05.11.2013 15:48

Цитата:

что часто даже не хочется ничего писать в ответ
Когда у меня возникает такое вот чувство, я просто говорю себе, что мне, помогали.
И при чём помогали те, кого больше всего это заездить должно.

alexcon314 05.11.2013 16:09

Цитата:

И я не перестану повторять - если человека, который уже работает или знает Оочень много и у которого дата регистрации меньше пол года или чуть более наводит только на одну мысль - у него был ещё акк и когда он начал заниматься в серьёз, то завел новый, что бы не показывать, какие у него у самого были глупые вопросы.
Бред какой-то.
Цитата:

И в большинстве случаев мои вопросы не вопросы, а просьба поделится опытом и сказать как лучше.
Да, все правильно, начинается все именно так. А дальше что?
Цитата:

но мне кажется, что из-за своей жадности и не желания поделится полученной информации, многие от этого страдают.
Нету никакой жадности, откуда вы вообще это взяли? На ваши 900 с лишним постов дано ответов раза в два больше, грубо говоря.
Цитата:

Не один раз я уже видел, когда форумчанен с датой регистрации совпадающей почти с моей датой рождения, вступая в спор, оказывается не прав.
И что? Бывает и похлеще :). К вам это какое отношение имеет?
Цитата:

я не могу сказать, что знаю всё, но если начать перечислять, что я читал и что я знаю, по крайней мере получится не мало.
Хоть это радует :). Скромность вообще украшает.
Цитата:

Когда у меня возникает такое вот чувство [видимо, "не хочется ничего писать в ответ"], я просто говорю себе, что мне, помогали.
На форуме никто никому ничего не обязан. Помогают по другим причинам, если помогают. И не помогают тоже по другим. В этом вся прелесть: хочешь - пиши, не хочешь - не пиши. Осуждать кого-то за то, что он вам не ответил или ответил не так, как вы ожидали, неверно. Здесь не школа, где преподаватель обязан рассказывать одно и тоже хоть по сто раз и отвечать на любые вопросы ученика, здесь просто форум.

ZackMercury 05.11.2013 16:33

Цитата:

И я не перестану повторять - если человека, который уже работает или знает Оочень много и у которого дата регистрации меньше пол года или чуть болеенаводит только на одну мысль - у него был ещё акк и когда он начал заниматься в серьёз,то завел новый, что бы не показывать, какие у него у самого были глупыевопросы.
Вы думаете, каждый опытный программист черпал знания только из форумов?
Кхе.

Akopalipsis 05.11.2013 16:39

я не буду больше говорить о такой ерунде :)

Dukobpa3 05.11.2013 19:24

А люди, которые учебники продают за деньги (афигеть просто, они еще и деньги за это берут!!!!!!) - из жадности это делают?

Эгоистическая сторона вопроса:
Ты просто вот прикнь палец к носу и посчитай сколько стоит час твоей работы и час работы того кто на твой вопрос ответил. И подумай не сильно ли ты афигел столько времени занимать по вопросам, на которые гугл выдает ответ в первой строке поиска.

Альтруистическая и мудрая сторона вопроса:
Всё что ты получаешь должно быть как-то оплачено. Даже если это просто опыт и знания. То за что ты не заплатил: временем, эмоцией, деньгами, сломаной рукой, бессонной ночью - ты просто не воспримешь как что-то важное. Ты недостаточно для этого потратил усилий. В одной ухо влетит в другое вылетит.
И поэтому предполагается что ты потрудился сначала сам, а уже потом когда уперся во что-то конкретное - уточняешь или просишь помощи у тех кто больше знает.

dimarik 06.11.2013 02:22

Akopalipsis и Dukobpa3 хорош линчевать друг друга. Отставить! Разойдись! Два плюса вне очереди! Каждому.


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

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