Log2 is pretty fast. 

We use BSR if available. 

https://c9x.me/x86/html/file_module_x86_id_20.html


> On Jun 5, 2020, at 3:01 PM, Doug Coleman <doug.cole...@gmail.com> wrote:
> 
> 
> As long as you can fully round-trip the integer, it doesn't matter how many 
> bytes you use.
> 
> nano-count dup 4 >be be> = .
> f
> 
> nano-count dup 8 >be be> = .
> t
> 
> nano-count dup 128 >be be> = .
> t
> 
> 
> ``log2 1 +`` will give you the required number of bits to store an integer. 
> You will want to round up to a power of 8 bits or a power of two bytes.
> 
> USE: math.bitwise
> nano-count dup dup log2 1 + bits =
> 
>> On Fri, Jun 5, 2020 at 4:44 PM Alexander Ilin <ajs...@yandex.ru> wrote:
>> Hello again!
>>  
>>  My specific example is the following. I want to put the output of 
>> `nano-count` into a `byte-array`, which is fed into a hash. The current 
>> value of `nano-count` is one of the sources of randomness gathered from the 
>> system and poured into the hash. To convert the integer value into a 
>> `byte-array` there are `>le` and `>be`, but they require the number of bytes 
>> as a parameter. The question is, what should I supply for the value received 
>> from `nano-count`?
>>  
>>  And the bigger question is, given an integer value, is there a way to 
>> interrogate it about its byte size, i.e. the minimum number of bytes it 
>> takes to hold the value without truncation and without leading zeroes:
>>  
>>  Value -- MinSize
>>  0 -- 1
>>  255 -- 1
>>  256 -- 2
>>  65535 -- 2
>>  65536 -- 3
>>  etc.
>>  
>>  I would expect such information to be available somewhere without doing the 
>> power of two calculations in a loop.
>>  
>> 23.03.2020, 05:41, "Doug Coleman" <doug.cole...@gmail.com>:
>> For Factor, integers are either fixnum or bignum size. For C, you tell it 
>> how many bytes it occupies according to the C header. Generally the sizes 
>> are the same across platforms. If they aren't, you might need two different 
>> STRUCT: declarations like in basis/unix/stat/linux/32/32.factor and 
>> basis/unix/stat/linux/64/64.factor.
>>  
>> The main point -- function signatures and struct declarations usually handle 
>> the integer sizes and you shouldn't have to think much about it. Do you have 
>> a specific example? 
>>  
>>  
>>  
>> Earlier I wrote:
>>  One more question. I want to convert an integer into a byte-array 
>> containing its bytes. In my use case it was the return value of the 
>> nano-count, but the question is general: how can I get the bytes of an 
>> integer.
>>  
>>  For floats there are primitives like float>bits and double>bits, and for 
>> integers there is >le and >be, but for the latter two I need to specify the 
>> size in bytes. Is there a way to ask an integer how many bytes it occupies? 
>> Because from the documentation it's not clear at all how many bytes 
>> nano-count would return, and it may vary depending on the current platform. 
>> What am I missing?
>> _______________________________________________
>> Factor-talk mailing list
>> Factor-talk@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/factor-talk
> _______________________________________________
> Factor-talk mailing list
> Factor-talk@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/factor-talk
_______________________________________________
Factor-talk mailing list
Factor-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to