Integer писал (а):
Вы выяснили какая правильная?
к сожалению конструкция NormalizeDouble(x-y,Digits) не идентична конструкции NormalizeDouble(x,Digits) -NormalizeDouble(y,Digits)
Integer:
А она не должна быть идентичной. Правильная первая.
к сожалению конструкция NormalizeDouble(x-y,Digits) не идентична конструкции NormalizeDouble(x,Digits) -NormalizeDouble(y,Digits)
Вторая правильная
Еще лучше NormalizeDouble(NormalizeDouble(x,Digits) -NormalizeDouble(y,Digits),Digits), тогда точно проблем не будет.
ВотЬ мои грабли
double x[]={1.30396467,1.30432933,1.30466667,1.30638800,1.30726733,1.30731800, 1.30755200,1.30764133,1.30787800,1.30806533,1.30807733,1.30813933,1.30828467, 1.30829733,1.30832667,1.30869467,1.30876933,1.30887267,1.30896200,1.30948267, 1.30961933,1.31191600,1.31208467,1.31237467,1.31256400,1.31280000,1.31307067, 1.31315600,1.31315733,1.31316733,1.31320600,1.31325133,1.31328200,1.31334200, 1.31344867,1.31360400,1.31368333,1.31375400,1.31383733,1.31420933,1.31458667, 1.31467933,1.31496467,1.31509267,1.31539933,1.31570800,1.31585133,1.31590200, 1.31600667,1.31606467,1.31607200,1.31622667,1.31681067,1.31713333,1.31713600, 1.31715467,1.31732800,1.31737533,1.31741400,1.31762067,1.31769133,1.31789800, 1.31799733,1.31800733,1.31813867,1.31816067,1.31819200,1.31819267,1.31821867, 1.31831200,1.31834933,1.31835267,1.31845800,1.31854400,1.31864467,1.31865800, 1.31867200,1.31868400,1.31879867,1.31885333,1.31886333,1.31886733,1.31889133, 1.31900133,1.31900267,1.31918800,1.31920867,1.31951533,1.31954667,1.31954800, 1.31961933,1.31990600,1.31993333,1.32005667,1.32029533,1.32034067,1.32045667, 1.32069400,1.32133733,1.32142267,1.32148133,1.32167267,1.32223867,1.32231133, 1.32256267,1.32305467,1.32329600,1.32386533,1.32428867,1.32435067,1.32449600, 1.32615667,1.32620400,1.32642867,1.32693533,1.32702267,1.32752667,1.32774133, 1.32827667,1.33087400}; double ux[]; int start(){ //1 ArrayResize(ux,1); ux[0]=x[0]; for(int i=1;i<ArraySize(x);i++){ if(NormalizeDouble(x[i]-ux[ArraySize(ux)-1],Digits)!=0){// (!) ArrayResize(ux,ArraySize(ux)+1); ux[ArraySize(ux)-1]=x[i]; } } int h=FileOpen("Test_1.txt",FILE_CSV|FILE_WRITE); for(i=0;i<ArraySize(ux);i++){ FileWrite(h,DoubleToStr(ux[i],Digits),NormalizeDouble(ux[i],Digits),ux[i]); } FileClose(h); //2 ArrayResize(ux,1); ux[0]=x[0]; for(i=1;i<ArraySize(x);i++){ if(NormalizeDouble(x[i],Digits)-NormalizeDouble(ux[ArraySize(ux)-1],Digits)!=0){// (!) ArrayResize(ux,ArraySize(ux)+1); ux[ArraySize(ux)-1]=x[i]; } } h=FileOpen("Test_2.txt",FILE_CSV|FILE_WRITE); for(i=0;i<ArraySize(ux);i++){ FileWrite(h,DoubleToStr(ux[i],Digits),NormalizeDouble(ux[i],Digits),ux[i]); } FileClose(h); //3 ArrayResize(ux,1); ux[0]=x[0]; for(i=1;i<ArraySize(x);i++){ if(NormalizeDouble(NormalizeDouble(x[i],Digits)-NormalizeDouble(ux[ArraySize(ux)-1],Digits),Digits)!=0){// (!) ArrayResize(ux,ArraySize(ux)+1); ux[ArraySize(ux)-1]=x[i]; } } h=FileOpen("Test_3.txt",FILE_CSV|FILE_WRITE); for(i=0;i<ArraySize(ux);i++){ FileWrite(h,DoubleToStr(ux[i],Digits),NormalizeDouble(ux[i],Digits),ux[i]); } FileClose(h); //4 ArrayResize(ux,1); ux[0]=x[0]; for(i=1;i<ArraySize(x);i++){ if(NormalizeDouble(x[i],Digits)!=NormalizeDouble(ux[ArraySize(ux)-1],Digits)){// (!) ArrayResize(ux,ArraySize(ux)+1); ux[ArraySize(ux)-1]=x[i]; } } h=FileOpen("Test_4.txt",FILE_CSV|FILE_WRITE); for(i=0;i<ArraySize(ux);i++){ FileWrite(h,DoubleToStr(ux[i],Digits),NormalizeDouble(ux[i],Digits),ux[i]); } FileClose(h); return(0); } //+------------------------------------------------------------------+
Renat писал (а):
Integer писал (а):
А она не должна быть идентичной. Правильная первая.к сожалению конструкция NormalizeDouble(x-y,Digits) не идентична конструкции NormalizeDouble(x,Digits) -NormalizeDouble(y,Digits)
Каков же приговор?
Правильна первая.
if(NormalizeDouble(1.1-1.2,0)==0){Alert("Нормализованные 1.1 и 1.2 равны");} if(NormalizeDouble(1.2-1.6,0)==0){Alert("Нормализованные 1.2 и 1.6 равны");} if(NormalizeDouble(1.1-1.6,0)==0){} else {Alert("Нормализованные 1.1 и 1.6 не равны");}Наверно, все таки, использование одного или другого варианта зависит от целей и задач.
Integer писал (а):
if(NormalizeDouble(1.1-1.2,0)==0){Alert("Нормализованные 1.1 и 1.2 равны");} if(NormalizeDouble(1.2-1.6,0)==0){Alert("Нормализованные 1.2 и 1.6 равны");} if(NormalizeDouble(1.1-1.6,0)==0){} else {Alert("Нормализованные 1.1 и 1.6 не равны");}Наверно, все таки, использование одного или другого варианта зависит от целей и задач.
Некорректно. Округление до целого.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
к сожалению конструкция NormalizeDouble(x-y,Digits) не идентична конструкции NormalizeDouble(x,Digits) -NormalizeDouble(y,Digits)