Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Misha v.3 11.02.2005 16:35 / 11.02.2005 17:07
как оказалось у парсера с double не работают битовые операции, сдвиговые операции, деление нацело и получение остатка от деления.########################################################################### # 5000 итераций: out of memory # 3000 итераций: time = 1061.96, memory_kb = 15808 @intToIp1[num][d;d1;d2;d3] $d(^num.double[]) $d1(^math:floor($d / 0x1000000)) ^d.dec($d1 * 0x1000000) $d2(^math:floor($d / 0x10000)) ^d.dec($d2 << 16) $d3(^math:floor($d / 0x100)) ^d.dec($d3 << 8) $result[${d1}.${d2}.${d3}.^d.format[%d]] #end @intToIp[] ########################################################################### # 5000 итераций: out of memory # 3000 итераций: time = 1288.62, memory_kb = 19464 @intToIp2[num][d;d1] $d[^num.format[%08x]] $result[$d1[0x^d.left(2)]^eval($d1).$d1[0x^d.mid(2;2)]^eval($d1).$d1[0x^d.mid(4;2)]^eval($d1).$d1[0x^d.right(2)]^eval($d1)] #end @intToIp[] ########################################################################### # 5000 итераций: time = 1240.1, memory_kb = 15576 # 3000 итераций: time = 736.207, memory_kb = 9332 @intToIp3[num][d;d1;d2;d3] $d(^num.double[]) $d4($d % 0x100) $d3((($d - $d4) % 0x10000) >> 8) $d2((($d - $d4 - $d3) % 0x1000000) >> 16) $d1(^math:floor(($d - $d4 - $d3 - $d2) / 0x1000000)) $result[${d1}.${d2}.${d3}.$d4] #end @intToIp[] ########################################################################### # 5000 итераций: time = 1190.26, memory_kb = 15660 # 3000 итераций: time = 703.762, memory_kb = 9376 @intToIp4[num][d;dd;d1;d2;d3;d4] $d(^num.double[]) $d1(^math:floor($d / 0x1000000)) $dd($d % 0x1000000) $d2(($dd >> 16) & 0xFF) $d3(($dd >> 8) & 0xFF) $d4(($dd) & 0xFF) $result[${d1}.${d2}.${d3}.$d4] #end @intToIp[] ########################################################################### @main[] $ints[^table::create{num 4278058235 3583543172 }] ^ints.menu{ $ints.num = ^intToIp[$ints.num] }[<br />] <hr /> ^run_time{ ^for[i](0;5000){^ints.menu{$tmp[^intToIp[$ints.num]]}} }[v] time = $v.time, memory_kb = $v.memory_kbт.е. варианты 3 и 4 примерно одинаковые по скорости/памяти