清除一个定义元素的数组 - 页 13

 
Maxim Kuznetsov:

优化器没有参与 - 有一半的比较...

仔细浏览战术,看到逻辑的完全吻合性
ZS.我犹豫了一下,不过。
 

只是一个小型的重构("因为你不可能在这个世界上如此美丽...")。

#define  BENCHMARK_TEST(function, test_name)     \
   ArrayCopy(arr2,arr);                         \
   t=GetMicrosecondCount();                     \
   N=##function(arr2,Value);                    \
   t=GetMicrosecondCount()-t;                   \
   printf("вариант %-12s: Контрольная сумма = %f; элементов - %d; время выполнения - %6d микросекунд", test_name, ControlSumm(arr2), N, t);


void OnStart()
{
   srand(1);
   
   int N;
   ulong t;
   int Value=rand()%1000; // значение, которое нужно удалить из массива
   
   int arr[]; // исходный массив
   int arr2[]; // создаем еще один массив для теста и копируем в него исходный массив

   ArrayResize(arr,1000000);
   for(int i=0; i<1000000;i++){ 
      arr[i]=rand()%1000; //генерируем исходный массив случайными значениями от 0 до 1000
   }   
   
   BENCHMARK_TEST(ArrayDeleteVal1,      "Pastushak");
   BENCHMARK_TEST(arrayFilter,          "Korotky");
   BENCHMARK_TEST(DelEl2,               "Fedoseev");
   BENCHMARK_TEST(ArrayDeleteVal,       "Semko");
   BENCHMARK_TEST(ArrayModify,          "Pavlov");
   BENCHMARK_TEST(arrayFilter2,         "Nikitin");
   BENCHMARK_TEST(ArrayDelV,            "Vladimir");
   BENCHMARK_TEST(PeterArray,           "Peter");
   BENCHMARK_TEST(arrayFilter3,         "Kuznetsov");
}

//..............................................

结果。
2018.11.15 01:11:13.670 Test (EURUSD,H1)        вариант Pastushak   : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения - 127587 микросекунд
2018.11.15 01:11:13.675 Test (EURUSD,H1)        вариант Korotky     : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -   2530 микросекунд
2018.11.15 01:11:13.679 Test (EURUSD,H1)        вариант Fedoseev    : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -   1995 микросекунд
2018.11.15 01:11:13.681 Test (EURUSD,H1)        вариант Semko       : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -    854 микросекунд
2018.11.15 01:11:13.686 Test (EURUSD,H1)        вариант Pavlov      : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -   3239 микросекунд
2018.11.15 01:11:13.692 Test (EURUSD,H1)        вариант Nikitin     : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -   3812 микросекунд
2018.11.15 01:11:13.698 Test (EURUSD,H1)        вариант Vladimir    : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -   4037 микросекунд
2018.11.15 01:11:13.707 Test (EURUSD,H1)        вариант Peter       : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -   7855 микросекунд
2018.11.15 01:11:13.710 Test (EURUSD,H1)        вариант Kuznetsov   : Контрольная сумма = 7224.813498; элементов - 998994; время выполнения -    744 микросекунд
附加的文件:
 
Sergey Dzyublik:

只是一个小型的重构("因为你不可能在这个世界上如此美丽...")。

就在我问的上面--尝试把原始数组作为一个系列。ArraySetAsSeries(...,true)。

这是一个相当有意义的问题--看看哪些方法对序列完全不起作用,哪些方法出乎意料的慢。

不要介意阵列滤波,关于系列的问题更实用

 
Sergey Dzyublik:

只是一个小型的重构("因为你不可能在这个世界上如此美丽...")。

谢谢你,谢尔盖,给我们上了一堂有用的质量课。:)

 

@Maxim Kuznetsov 移到一个单独的类别,毕竟功能不同。

推荐有错误的测试(Semko和Pavlov)。

添加您的变体

P.S. 和模板需要被删除,这也是比较双打时的一个潜在错误

附加的文件:
 
Stanislav Dray:

@Maxim Kuznetsov 移到一个单独的类别,毕竟功能不同。

推荐有错误的测试(Semko和Pavlov)。

添加您的变体

P.S. 模板也必须被删除,这是比较双打的潜在错误。

使最后两个数组元素等同于Value。森科没有错误。请告诉我们在什么情况下出现的错误。扔掉一个领导人是不太明智的。

那些与双倍数有关的错误是什么,是由它们的正常化引起的?所以,如果你用一个双数的数组工作,你需要担心自己把归一化的数据放入数组。

 
Dmitry Fedoseev:

使数组的最后两个元素等于Value。Semko没有任何错误。告诉我他在哪些情况下有错误。扔掉领导人是不公平的。

那些与双倍数有关的错误是什么,是由它们的正常化引起的?如果我们要处理的是一个双数的数组,我们就必须自己把归一化的数据加入数组中。

我只是在代码中做了注释,你可能没有注意到。如果最后一个数组元素属于删除条件,即等于Value,则出现错误。

我没有把它从代码中删除:),只是为了防止有人复制这个错误。我认为尼古拉会纠正他的代码,他将自己返回 :)

至于模板:当传递双数时将会出现错误,因为该函数对实数的比较是不正确的,或者说,它根本就不是为了这个目的,所以在你放模板之前,我们应该确保该函数在任何类型下都能正确工作。

1

 
Stanislav Dray:

我在代码中做了注释,你可能没有注意到。错误是如果数组的最后一个元素属于删除条件,即等于Value

我没有把它从代码中删除:),只是为了防止有人在复制它时出现错误。我认为尼古拉会纠正他的代码,他将自己返回 :)

关于模板:当传递双数时将会出现错误,因为该函数对实数的比较是不正确的,或者说它根本就不是为了这个目的,所以在你放模板之前,你应该确保该函数在任何类型下都能正常工作。


那有什么可注意的呢?这一点。"如果数组的一个或多个最后的元素落在一个条件下,数组就会被破坏"?这就是我在上面写的--没有用。 我从你的截图中可以看出,这不是问题的关键。这个错误似乎是在项目数量较少时发生的。

双倍会出现什么样的错误?为什么?无论数组中的数据是什么,都会以这种方式工作。如果你想让它正常工作,你应该在把它放入数组之前进行归一化处理。但你不应该把规范化插入到函数本身。该功能与模板完全吻合,如果你正确使用它,在双倍的情况下也能正常工作。

每个人都突然关心起双重问题,这是非常好的事实。

 
Dmitry Fedoseev:

有什么值得注意的呢?这一个。"如果一个或多个最后的元素属于该条件,则该数组被破坏"?这就是我在上面写的,它没有工作。 从你的截图可以看出,这不是问题的关键。这个错误似乎是在项目数量较少时发生的。

双倍会出现什么样的错误?为什么?无论数组中的数据是什么,都会以这种方式工作。如果你想让它正常工作,你应该在把它放入数组之前进行归一化处理。但你不应该把规范化插入到函数本身。该功能与模板完全吻合,如果你正确地使用它,就能顺利工作。

每个人都突然关心起双倍的问题,这是非常好的,但人们必须明智地对待它。

你和我对函数应该如何工作有不同的看法。 一个函数在非洲就是一个函数,它应该在没有任何数据准备的情况下工作,一切都必须在内部工作。

P.S. 其实没有人关心,我也不太在意。我只是写道,这里的模板是狗的第五条腿,可能是一个错误。

 
Stanislav Dray:

一个函数就是一个函数,应该在没有任何数据准备的情况下工作,一切都应该在内部工作。

这就是幼儿园。