//+------------------------------------------------------------------+ //| Ben.mq5 | //| Copyright 2026, Niquel Mendoza | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2026, Niquel Mendoza" #property link "https://www.mql5.com" #property version "1.00" #property strict #property script_show_inputs //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #include "CLZ.mqh" #include //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ input int InpNumReps = 1000000; // Num reps input ulong InpXhoSeed = __RANDOM__; // Seed //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CLZ64_Bin(ulong x) { if(x == 0) return 64; int n = 0; if((x & 0xFFFFFFFF00000000) == 0) { n += 32; x <<= 32; } if((x & 0xFFFF000000000000) == 0) { n += 16; x <<= 16; } if((x & 0xFF00000000000000) == 0) { n += 8; x <<= 8; } if((x & 0xF000000000000000) == 0) { n += 4; x <<= 4; } if((x & 0xC000000000000000) == 0) { n += 2; x <<= 2; } if((x & 0x8000000000000000) == 0) { n += 1; } return n; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CLZ64_Slow(ulong x) { if(x == 0) return 64; int count = 0; for(int i = 63; i >= 0; i--) { if((x & (1ULL << i)) != 0) break; count++; } return count; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CLZ_64(ulong x) { if(x == 0) return 64; // 64 completos //--- x |= x >> 1; x |= x >> 2; x |= x >> 4; x |= x >> 8; x |= x >> 16; x |= x >> 32; //--- return TSN::g_tsntables_clz[((x * TSN_TABLES_CLZ_CONSTANT_MAGIC64) >> 58)]; } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- ulong test[]; ArrayResize(test, InpNumReps); Xoshiro256 xo; xo.Seed(InpXhoSeed); for(int i = 0; i < InpNumReps; i++) { test[i] = xo.RandomUlong(); } //--- int c = 0; ulong a = GetMicrosecondCount(); for(int i = 0; i < InpNumReps; i++) { c += CLZ64_Slow(test[i]); } ulong b = GetMicrosecondCount(); PrintFormat("Tiempo CLZ64 Slow base = %I64u, checksum = %d", (b - a), c); //--- c = 0; a = GetMicrosecondCount(); for(int i = 0; i < InpNumReps; i++) { c += TSN::CBitTricks::CLZ(test[i]); } b = GetMicrosecondCount(); PrintFormat("Tiempo TSN::CLZ = %I64u, checksum = %d", (b - a), c); //--- c = 0; a = GetMicrosecondCount(); for(int i = 0; i < InpNumReps; i++) { c += CLZ64_Bin(test[i]); } b = GetMicrosecondCount(); PrintFormat("Tiempo CLZ64_Bin base = %I64u, checksum = %d", (b - a), c); //--- c = 0; a = GetMicrosecondCount(); for(int i = 0; i < InpNumReps; i++) { c += CLZ_64(test[i]); } b = GetMicrosecondCount(); PrintFormat("Tiempo CLZ_64 = %I64u, checksum = %d", (b - a), c); } //+------------------------------------------------------------------+