Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
а вообще меня напрягает тот факт что рассчитав дробное число, нормализовав его, записав в переменную, потом прочитав и нормализовав снова я получаю хвосты
например
basis[0]=NormalizeDouble(sum_A,2);
GlobalVariableSet("Equity-"+portfolio_id,basis[0]);
...
current=NormalizeDouble(GlobalVariableGet("Equity-"+portfolio_id),2);
text = "Positions synchronized at " + current + " for portfolio: " + portfolio_name;
if(!automatic) MessageBox(text,""); else Print(text);
сейчас уже поменял на
text = "Positions synchronized at " + DoubleToStr(current,2) + " for portfolio: " + portfolio_name;
if(!automatic) MessageBox(text,""); else Print(text);
и вроде бы хвосты не вылезают, тьфу тьфу
Уже писал, повторю - не существует в двоичной системе некоторых чисел. Нет там 0,1 нет 0,3 и многих других. Сколько не пишите double val = NormalizeDouble(0.1434, 1) вы никогда не получите 0,1 просто потому, что нет такого числа.
Например, числа представляются следующим образом:
0.1 = 0.10000000000000001
0.2 = 0.20000000000000001
0.3 = 0.29999999999999999
0.4 = 0.40000000000000002
0.6 = 0.59999999999999998
но
0.125 = 0.125
0.25 = 0.25
0.5 = 0.5
Если это сильно тревожит, то нужно либо округлять, либо писать свой велосипед для представления дробных чисел (возможно существуют какие-то библиотеки, не интересовался), который не будет использовать fpu.
И не прибавляется никаких хвостов во время преобразования в строку, они есть там изначально.
так я вопрос решил свой, можно тему закрывать
solution: нужно делать принудительное округление double даже после нормализации
вполне возможно... но с точки зрения конечного результата - хвосты есть!
...
Нет хвостов после нормализации.
По-моему вы вводите человека в заблуждение. Что значит нет хвостов после нормализации? Хвостов может не быть только в строке, которую мы получили из числа и округлили значение (округлили уже в строке, а не в double). А после NormalizeDouble() хвосты есть.
Неправильное решение. При округлении надо умножить, округлить, разделить. После последнего деления число будет ненормализованным.
Что вы понимаете под нормализацией? Тут stringo говорил, что алгоритм примерно такой:
По-моему вы вводите человека в заблуждение. Что значит нет хвостов после нормализации? Хвостов может не быть только в строке, которую мы получили из числа и округлили значение (округлили уже в строке, а не в double). А после NormalizeDouble() хвосты есть.
Что вы понимаете под нормализацией? Тут stringo говорил, что алгоритм примерно такой:
Я вам конкретный вопрос а вы воду льёте. Как бы это нормально пояснять и аргументировать свою точку зрения.
Почитать учебники и документацию вслух что ли? Или почитать вслух словарь, про слово "примерно"?