Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А вопрос про косяки функции Print() оставим открытым? :)
Как угодно.
ОК. Тогда я возьму на себя наглость. Итак, в описании функции Print() сказано, что "Данные типа double выводятся с точностью до 16 десятичных цифр после точки". На самом деле оказалось, что функция Print() выводит несколько округлённые данные:
void OnStart() { double a,b; a=7.0/200.0; b=7.0/a; Print("Print(b)=",b); Print("Print(DoubleToString(b,16))=",DoubleToString(b,16)); }
MP 0 victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))=199.9999999999999716
ОК. Тогда я возьму на себя наглость. Итак, в описании функции Print() сказано, что "Данные типа double выводятся с точностью до 16 десятичных цифр после точки". На самом деле оказалось, что функция Print() выводит несколько округлённые данные:
MP 0 victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))=199.9999999999999716
123.4567890123456(7>5, поэтому округление вверх)
Вроде всё соответствует описанию. В чём косяк? Нули не выводятся?
Косяк в том, что функция Print() не выводит "Данные типа double с точностью до 16 десятичных цифр после точки".
проверьте
Print("Print(b)="+b);
проверьте
Не поленился, проверил.
Во-первых, при компиляции выдаётся: "implicit conversion from 'number' to 'string' victorg2.mq5 12 22".
Во-вторых,
IS 0 victorg2 (EURUSD,M1) 17:46:45 Print(b)=200
PJ 0 victorg2 (EURUSD,M1) 17:46:45 Print(DoubleToString(b,16))=199.9999999999999716
Для полного контроля формата используйте соответствующую функцию PrintFormat:
По умолчанию в Print используется обычный режим округления double до 4 знака. Документацию мы скорректируем.Дайте пожалуйста указатели (хендлы) на структуры (желательно и на массивы, включая статические).
Оборачивание в классы - часто плохое решение:
2012.04.07 20:49:38 SizeOf_Test (USDJPY,M30) sizeof(SEmpty) = 0
Дайте пожалуйста указатели (хендлы) на структуры (желательно и на массивы, включая статические).
В каком смысле и зачем?
1. В каком смысле и
2. зачем?
1.
CEmpty *C[]; // Это работает. SEmpty *S[]; // Error: 'SEmpty' - class type expected SizeOf_Test.mq5 19 1
Для создания массивов указателей на структуры (массивы). С последующей инициализацией for(i){ S[i] = GetPointer(StaticStruct[i]); }
2. Чтоб сохранять сплошную (упакованную) форму массивов значимых данных.
Важно при работе с выводом данных в сырые буферы OpenCL (или отправку в DLL, запись в файлы и т.п.)
При этом сохраняется (появляется) возможность переупорядочивания доступа к данным (например при сортировке указателей) без переписывания данных.