Скачать MetaTrader 5

Как написать значение double большого(маленького) типа?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Антон
25
Антон  

Необходимо объявить массив такого вида:

static double Mass[] =
{
0.7582593928053335, 7.6753588531137444e-016, -0.45713134204312378, 3.5379697101544483e-016,

-1.777010969324789e-016, -0.30473991739945061, 1.3871514416894263e-016, 0.011580305451895617};

Пишет: ' 7.6753588531137444e' - invalid number ...

Как объявляются значения с буквой e ?

Vadim Zhunko
5226
Vadim Zhunko  
В MQL4 нет таких констант. Можно через это.
Alexander
2441
Alexander  
А попробуйте заменить 7.6753588531137444e-016 на 7.6753588531137444 * e-016
Vadim Zhunko
5226
Vadim Zhunko  
Roger:
А попробуйте заменить 7.6753588531137444e-016 на 7.6753588531137444 * e-016

Вы сами попробывали?

Это же произведение с вычитанием.

Алексей Тарабанов
7324
Алексей Тарабанов  
tosha_82:

Необходимо объявить массив такого вида:

static double Mass[] =

...

Как объявляются значения с буквой e ?

1. Собственно, по тексту ответ уже дали - нет в MQL типа данных float. Да и не объявление это, а попытка инициализации элементов массива.

2. По контексту: в том же MQL массив - всегда static.

3. Соответственно,- ответ:

double Mass[];

Все.

Alexander
2441
Alexander  
Zhunko:

Вы сами попробывали?

Это же произведение с вычитанием.


Нет, не пробовал. Лень было Метаедитор открывать. Просто зашел сюда https://docs.mql4.com/ru/basis/types/double, подумал, почему бы и нет.:-(
Vladimir Gomonov
8305
Vladimir Gomonov  
#define E_16  0.00000001*0.00000001

static double Mass[] =
{
0.7582593928053335, 7.6753588531137444*E_16, -0.45713134204312378, 3.5379697101544483*E_16,

-1.777010969324789*E_16, -0.30473991739945061, 1.3871514416894263*E_16, 0.011580305451895617};
Так должно скомпиляться.
Алексей Тарабанов
7324
Алексей Тарабанов  
MetaDriver:
Так должно скомпиляться.
Никому оно не должно. Не макрос это (в четверке), а мелкий подхалимаж.
Vladimir Gomonov
8305
Vladimir Gomonov  
tara:
Никому оно не должно. Не макрос это (в четверке), а мелкий подхалимаж.

А почему подхалимаж? И почему мелкий? :)

Кстати, - не компиляется. Да и не должно, как показало вскрытие хелпа:

Справочник MQL4 - Основы языка - Переменные - Инициализация переменных >

.... Массивы (в том числе и объявленные на локальном уровне) могут инициализироваться только константами.

Т.е. выражения не вычисляются при компиляции. Вот такой код у меня однако скомпилировался:

double Mass[] =
{
0.7582593928053335, 
0.0000000000000076753588531137444, 
-0.45713134204312378, 
0.0000000000000035379697101544483,
-0.000000000000001777010969324789,
-0.30473991739945061, 
0.0000000000000013871514416894263, 
0.011580305451895617
};
Алексей Тарабанов
7324
Алексей Тарабанов  
MetaDriver:

А почему подхалимаж? И почему мелкий? :)

Кстати не компиляется. Да и не должно, как показало вскрытие хелпа:

Справочник MQL4 - Основы языка - Переменные - Инициализация переменных >

.... Массивы (в том числе и объявленные на локальном уровне) могут инициализироваться только константами.

.

Т.е. выражения не вычисляются при компиляции.

Вот такой код у меня однако скомпилировался:

Владимир, при чем тут массивы?

Он (код) не скомпилировался, а вставился (imho). Бодаться будем?

Vladimir Gomonov
8305
Vladimir Gomonov  
tara:

1. Владимир, при чем тут массивы?

2. Бодаться будем?

1. В исходном примере нарисована трудность при инициализации массива. Я добивался работоспособности именно для этого случая. Для остальных проще (имха).

2. Обязательно. :) Вот этот код работает. Проверьте.

double Mass[] =
{
0.7582593928053335, 
0.00000000000000076753588531137444, 
-0.45713134204312378, 
0.00000000000000035379697101544483,
-0.0000000000000001777010969324789,
-0.30473991739945061, 
0.00000000000000013871514416894263, 
0.011580305451895617};

int start()
  {
   for(int i=0; i<8; i++) Print(DoubleToStr(Mass[i]*100000000*100000000,8));
   return(0);
  }
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий