Просмотр полной версии : Вычитание нецелых чисел
Akopalipsis
04.11.2013, 02:36
Сначала задал вопрос в общем разделе, но прошло время и я склонился к мысли, что это уже для раздела связанного с кодом.
Простой пример - сделал я калькулятор или что то, что предназначено для счёта и пользователь начинает считать -
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
И программа воспринимает число 1.1379786002407855e-15 не как 0.000000000000001137, а как полтора.
1.1379786002407855e-15 = 0.0000000000000011379786002407855
Какие проблемы?
Добавлено через 6 минут
И округлять int, uint нельзя и RegExp тоже нельзя цифры резать...
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%D0%B8%D1%81%D0%BB%D0%BE_%D1%81_%D0%BF%D0%BB%D0%B0%D0%B2%D0%B0%D1%8E%D1%89%D0%B5%D0%B9_%D0%B7%D0%B0%D0%BF%D1%8F%D1%82%D0%BE%D0%B9
п.с. Так же очень советую почитать книжку SCJP Sun Certified Programmer for Java 6 (https://java.net/downloads/jfjug/SCJP%20Sun%20Certified%20Programmer%20for%20Java%206-0071591060.pdf). Книжка хоть и по джаве, но там очень подробно рассматриваются вопросы типа "как это работает?" почитав её, многое поймете и об ас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
А люди, которые учебники продают за деньги (афигеть просто, они еще и деньги за это берут!!!!!!) - из жадности это делают?
Эгоистическая сторона вопроса:
Ты просто вот прикнь палец к носу и посчитай сколько стоит час твоей работы и час работы того кто на твой вопрос ответил. И подумай не сильно ли ты афигел столько времени занимать по вопросам, на которые гугл выдает ответ в первой строке поиска.
Альтруистическая и мудрая сторона вопроса:
Всё что ты получаешь должно быть как-то оплачено. Даже если это просто опыт и знания. То за что ты не заплатил: временем, эмоцией, деньгами, сломаной рукой, бессонной ночью - ты просто не воспримешь как что-то важное. Ты недостаточно для этого потратил усилий. В одной ухо влетит в другое вылетит.
И поэтому предполагается что ты потрудился сначала сам, а уже потом когда уперся во что-то конкретное - уточняешь или просишь помощи у тех кто больше знает.
Akopalipsis и Dukobpa3 хорош линчевать друг друга. Отставить! Разойдись! Два плюса вне очереди! Каждому.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.