Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Почему так сразу кто-то виноват, а не я себе любимый? Надо правильно даблами пользоваться - MathFloor(NormalizeDouble(15.0*0.01/0.05,8));
Дмитрий, спасибо за единственный толковый ответ.
Прибавлять 0,000000001 к числу либо переводить в строковые и брать значение до запятой в голову приходило, но это непрофессионально.
Нормализовать до 8 знака помогает, хотя до конца не понятно, почему.
И навряд ли кто сможет детально, не отделываясь общими фразами, объяснить, почему.
Но, главное, работает :)
хотя до конца не понятно, почему.
И навряд ли кто сможет детально, не отделываясь общими фразами, объяснить, почему.
Если Вам непонятно почему и Вы не можете это доказать, то не надо было заявлять что это баг.
А если хотите детально, то пишите мне на почту.
.
.
.
.
.
.
.
P.S. это баг....
А вот так работает правильно:
Можно делать вывод где собака порылась....
0.00000000000001
== while((1.+eps)>1.) eps/=10.0; eps*=10.0;
Получите "машинное епсилон" для нужного типа данных ;)....
Удачи.
И навряд ли кто сможет детально, не отделываясь общими фразами, объяснить, почему.
Без обид - судя по тому, что этот вопрос возник, у Вас просто пока не хватит знаний это понять.
Не всегда 8 знаков - от типа данных зависит в общем случае. Просто все данные в мкл - это double, в мантиссе 15 значащих, а 8 знаков мантиссы - это, если верить разработчикам, максимальная точность, доступная для NormalizeDouble() - они код выкладывали для этой функции.
Удачи.
умно, НО
почему тогда результаты MathFloor(15/0.05*0.01) и MathFloor(15*0.01/0.05) отличаются?
Сначала ведь выполняется действие в скобках.
Именно здесь спрятана ошибка разработчиков, насколько я понимаю - в отличии результатов.
Есть что возразить?
И не пишите умное: "Получите "машинное епсилон" для нужного типа данных" или "если хотите детально, то пишите мне на почту".
Детально хочу, и не только я, так что выносите на всеобщее обозрение.
Думаю, многие меня поддержат.
PS. Только, пожалуйста, детально не только почему получен результат 2, а также почему результаты отличаются. Думаю, это будет сложнее! ;)
Думаю, многие меня поддержат.
Фи.
Если б ты думал не о поддержке (и, соответственно, победе), а о своей проблеме, ты бы и сам давно допёр.
Лечись от игромании, прежде чем лезть на форекс... ;-)
Да, и вот ещё что.
Поскольку вопрос задан не из-за желания поспорить, а исходя из необходимости решения реальной задачи,
просьба не только предлагать вариант ответа, почему результат MathFloor(15*0.01/0.05) неправильный,
а способ решения проблемы.
Пока что не прозвучало ничего более толкового, чем
MathFloor(NormalizeDouble(15.0*0.01/0.05,8));
Однако и это не полное решение, цитирую:
"Не всегда 8 знаков - от типа данных зависит в общем случае. Просто все данные в мкл - это double, в мантиссе 15 значащих, а 8 знаков мантиссы - это, если верить разработчикам, максимальная точность, доступная для NormalizeDouble() - они код выкладывали для этой функции."
Тем не менее, нам что, пользуясь MathFloor, чтобы не переживать о правильности результата, каждый раз подставлять NormalizeDouble(...,8) либо что-нибудь другое?
Разве это нельзя зашить сразу в MathFloor?
Это несложно, решить проблему MathFloor(15*0.01/0.05),
но ведь нет гарантии, что при подстановке других чисел не повторится та же самая ОШИБКА,
и не важно, с чем она связана, с "машинное епсилон", точностью промежуточного вычисления либо чем-нибудь ещё,
понимаете, о чём я говорю?
Ведь это важно, особенно когда дело касается больших депозитов.
А "умников", типа MetaDriver'a, не предлагающих решения, а только вносящих флуд, просьба не соваться.
Гхм. :)
Поскольку ветка посвящена разработчикам (разумеется чиста из миролюбия и любви к истине), позволь запинать тебя на месте,
патамушта я таки живу с ними в одном городе и, таким образом, мои патриотические чувства чувствуют себя оскорблёнными. ;)
// Заметь - моя патриотическая оскорблённость имеет право на существование ничуть не меньшее, чем твоя хамская уверенность в обязанности окружающих
// (и в особенности разработчиков) решить твою надуманную проблему, даже если это потребует переписывания операционной системы. ;)
// По крайней мере мои соображения и права не менее религиозны нежели твои. А может даже и более. ;-)
Проблема надумана, ибо притянута за уши именно её подача как "ошибка разработчиков", "баг".
Феномен существует, но при чём тут баги?
Устройство феномена имеет точно ту же природу как и переполнение байта при присваивании ему числа большего чем 255.
Оно чуть сложнее по структуре и не так хорошо описано (в силу распространённой тенденции разработчиков "не травмировать идиотов интелектуальными
излишествами в документации. ибо деньги платят, а потому всегда правы."), но по своей сути ничем не отличается.
Ну и?
Ты ведь давно догадался, что феномен восходит к фундаментальным ограничениям в устройстве компа (а вовсе не частной функции языка mql4).
И какого хера ты продолжаешь нести пургу, прикрываясь "заботой о великих депозитах глуповатых трейдеров"? ;)
Тебе решение надо? Так тебе (лично тебе) одно уже дали. Для твоего случая вполне подходит и будет работать безотказно.
Это замечательно, что ты так сильно хочешь позаботиться и о других идиотах. Только почему-то за чужой счёт.
Вот возьми да и сам позаботься. Напиши свой (безошибочный!) терминал.
Слабо?
// Вот меня всегда поражает и прямо таки восхищает, что вот в такие вот моменты у "поциентов" всегда (!) автоматически пальцы веером растопыриваются,
// и они потрясённо озираясь по сторонам безмолвно (но всё же громогласно) вопрошают "Это што!!????.. Это он, падла, мне предлагает рукава штоль засучить!!??... Самому МНЕ???? "
// :)
Опять же замечательно, что ты хочешь получше разобраться в "слабо документированных" возможностях компа.
Но почему кто-то должен тебе это разжевать и положить в рот?
Давай уже дальше САМ. Тебе уже вполне достаточно здесь намекнули, как оно там устроено.
Даже для "самого ТЕБЯ". :) Дальше тебе вполне дожуют гугл и википедия.
Выздоравливай!
Аминь.
;)Не. Чёйто путаешь. Я профиль правил только один раз. Давно. // Фотку вставлял.
:)
Не. Чёйто путаешь. Я профиль правил только один раз. Давно. // Фотку вставлял.
:)