alias mapm_biton_bitoff {
var %bits $int($1) , %t 1
if (%bits !isnum 100-10000) var %bits 512
var %low.bf $calc(2^(%bits - 1)) , %hi.bf $calc(2^%bits) , %rand.bf $rands(%low.bf,%hi.bf)
var %base2 $base(%rand.bf,10,2)
echo -ag $count(%base2,1) of $len(%base2) bits are 1's. set $ $+ 2 = 1 to include crc checksum
var %i %t , %ticks $ticksqpc , %check
while (%i) {
var %j %bits
while (%j) {
var %a.bf %rand.bf
var %a.bf $biton(%a.bf,%j)
if ($2) var %check $crc(%check %a.bf,0)
dec %j
}
dec -s %i
}
echo -a style#1: biton time: $calc($ticksqpc - %ticks) %check
var %i %t , %ticks $ticksqpc , %check
while (%i) {
var %j %bits , %a.bf %rand.bf
while (%j) {
var %a.bf %rand.bf
if (!$isbit(%a.bf,%j)) var %a.bf %rand.bf + $calc(2^(%j -1))
if ($2) var %check $crc(%check %a.bf,0)
dec %j
}
dec -s %i
}
echo -a style#2 scripted-biton time: $calc($ticksqpc - %ticks) %check
var %i %t , %ticks $ticksqpc , %check
while (%i) {
var %j %bits
while (%j) {
var %a.bf %rand.bf
var %a.bf $bitoff(%a.bf,%j)
if ($2) var %check $crc(%check %a.bf,0)
dec %j
}
dec -s %i
}
echo -a style#1: bitoff time: $calc($ticksqpc - %ticks) %check
var %i %t , %ticks $ticksqpc , %check
while (%i) {
var %j %bits , %a.bf %rand.bf
while (%j) {
var %a.bf %rand.bf
if ($isbit(%a.bf,%j)) var %a.bf %a.bf - $calc(2^(%j -1))
if ($2) var %check $crc(%check %a.bf,0)
dec %j
}
dec -s %i
}
echo -a style#2 scripted-bitoff time: $calc($ticksqpc - %ticks) %check
}