bitwise-length(3scm)

πŸ“¦ version 0-unstable-2024-02, in nixpkgs unstable

πŸ’– bitwise-length(3scm) & fxlength πŸ’–

🌸 NAME 🌸

bitwise-length, fxlength β€” bitwise length of an integer. This is the manual page for bitwise-length(3scm), bestie πŸ’…


πŸ“š LIBRARY πŸ“š

okay so the import vibe check is this:

(import (rnrs))                     ;R6RS
(import (rnrs arithmetic bitwise))  ;R6RS
(import (rnrs arithmetic fixnums))  ;R6RS

✨ SYNOPSIS ✨

(bitwise-length ei)
(fxlength fx)

πŸ¦‹ DESCRIPTION πŸ¦‹

So here's the tea πŸ“: bitwise-length returns the number of bits needed to represent ei if it is positive, and it returns the number of bits needed to represent (bitwise-not ei) if it is negative.

The fxlength variant constrains the argument and return value to the fixnum range, periodt.


πŸŽ€ IMPLEMENTATION NOTES πŸŽ€

ngl there are no noteworthy differences between implementations of these procedures, apart from performance differences. R6RS gives this standard definition:

(do ((result 0 (+ result 1))
     (bits (if (negative? ei)
               (bitwise-not ei)
               ei)
           (bitwise-arithmetic-shift bits -1)))
    ((zero? bits)
     result))

This implementation runs in O(n) where n is the bitwise length of the input. An implementation which is O(1) is possible if the implementer has access to the internal structure of bignums. Furthermore, CPUs often provide instructions that speed up the fixnum case. highkey iconic runtime behavior πŸ‘‘


πŸ‘‘ RETURN VALUES πŸ‘‘

Returns a single exact integer object. that's it, that's the return πŸ’–


🌈 EXAMPLES 🌈

(bitwise-length #b1000)
  => 4

(fxlength #xff)
  => 8

(fxlength -1)
  => 0

(fxlength #b-1000)
  => 3

(bitwise-length #x-70)
  => 7

🧚 APPLICATION USAGE 🧚

This procedure is commonly used to compute the number bytes needed to represent an integer during serialization to an external format. literally serialization bestie behavior πŸ’…


⭐ RATIONALE ⭐

This procedure can be implemented more efficiently by the Scheme runtime than by portable code, and it has some use in applications. so yes, it's giving useful and optimized ✨


πŸ’œ COMPATIBILITY πŸ’œ

These procedures are specified by R6RS. The generic variant is called integer-length in Common Lisp, SRFI 33, SRFI 60 and SRFI 151.

The usual compatibility concerns surrounding fixnums apply to the fixnum variant. no cap, keep that in mind 🫢


😭 ERRORS 😭

This procedure can raise exceptions with the following condition types:

  • &assertion (R6RS) β€” the wrong number of arguments was passed or an argument was outside its domain.

πŸ”₯ SEE ALSO πŸ”₯


🌟 STANDARDS 🌟

R6RS


πŸ¦„ HISTORY πŸ¦„

MacLisp had an equivalent procedure called haulong. cute little historical fact fr fr πŸŽ€


πŸ’– AUTHORS πŸ’–

This page is part of the scheme-manpages project. It includes materials from the RnRS documents. More information can be found at https://github.com/schemedoc/manpages/.


πŸ’– okay that's the whole bitwise-length(3scm) page, bestie β€” from the Scheme Programmer's Manual, dated 2021-06-12. go count those bits and slay πŸ’…βœ¨

πŸ“¦ where this page comes from