From a7fd26582387e991b481d416f45921c42755de49 Mon Sep 17 00:00:00 2001 From: queue-miscreant Date: Fri, 7 Feb 2025 04:44:21 -0600 Subject: [PATCH] fixes for sitewide display --- .gitignore | 5 +++-- polycount/1/index.qmd | 32 ++++++++++++++++++++------------ polycount/2/index.qmd | 8 ++++++-- 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 43eaf97..605449d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ -**/*_files -*.html +_freeze/ +_site/ +/.quarto/ diff --git a/polycount/1/index.qmd b/polycount/1/index.qmd index ef6d917..88c9c66 100644 --- a/polycount/1/index.qmd +++ b/polycount/1/index.qmd @@ -1,13 +1,15 @@ --- +title: "Polynomial Counting 1: A primer" format: html: html-math-method: katex jupyter: python3 +date: "2021/02/03" +categories: + - algebra + - phinary --- -Polynomial Counting: A primer -============================= - The single most common method of representing numbers in the modern world is in *positional numeral system*. Despite being taught in early grade school, it is the result of millennia of mathematical thought. @@ -120,7 +122,7 @@ Naively, we might use the following "greedy" algorithm to derive the base-$b$ ex (also called a [β-expansion](https://en.wikipedia.org/wiki/Non-integer_base_of_numeration)) of a number $x$: ```{python} -from math import log +from math import log, floor def beta_expand_greedy( x: float, @@ -130,7 +132,7 @@ def beta_expand_greedy( ret = {} while x > tol: # While we're not precise enough - p = int(log(x, b)) # Get the place value p + p = int(floor(log(x, b))) # Get the place value p digit, new_x = divmod(x, b**p) # Get the quotient and remainder from # dividing by this place value ret[p] = int(digit) # Place the digit in place value p @@ -138,7 +140,12 @@ def beta_expand_greedy( return ret -def as_digits(digits: dict[int, int]): +``` + +As a demonstration, this algorithm, when run on a decimal number gives the same value: + +```{python} +def as_digits(digits: dict[int, int]) -> str: '''Convert a dictionary from `beta_expand_greedy` to a sequence of digits''' return "".join( str(digits.get(i, 0)) + ("." if i == 0 else "") @@ -160,7 +167,8 @@ There are three problems with this. Due to the nature of the approximation, the result can also appear in an unexpected form: ```{python} phi = (5**0.5 + 1) / 2 - # print(as_digits(beta_expand_greedy(10, phi))) + print("Expected:", "10100.0101") + print("Got: ", as_digits(beta_expand_greedy(10, phi))) ``` 2. It relies on a transcendental function, the logarithm. @@ -170,7 +178,7 @@ There are three problems with this. However, if `p` is always positive, we can instead use integer arithmetic, which is more precise. Generally, we need some form of fractional arithmetic. -Modern FPUs are make the last two items somewhat trivial, but they are necessarily approximate. +Modern FPUs are make the last two items somewhat trivial, but they necessarily make the calculation approximate. Fortunately for phinary, there is a direct method which remedies all these issues and produces exact results without floating-point operations. @@ -363,8 +371,8 @@ Expansions of the integers up to 10 are: These are known as *Zeckendorf expansions*. -These representations very similar to the phinary strings above. -Not only that, but this sequence is also the sequence of all binary strings that do not contain two consecutive 1's ([OEIS A014417](https://oeis.org/A014417)). +These representations seem very similar to the phinary strings above. +Not only that, but this sequence is also the sequence of all binary strings that do not contain two consecutive "1"s ([OEIS A014417](https://oeis.org/A014417)). This representation is exactly as arbitrary as preferring the greedy phinary representation; instead, this is the "greedy series expansion" of an integer in the Fibonacci numbers. @@ -395,7 +403,7 @@ $$ In the expansion of 2, the rightmost "1" seems to underflow. However, in the expansion of 4, we must consider the second "1" in the negative first place value. -It acts as a sort of temporary storage which is immediately transferred into place value 0. +It acts as a sort of temporary storage which is immediately transferred into place value zero. Synthesis: Generalizing Phinary @@ -517,4 +525,4 @@ Closing ------- With these restrictions in mind, I wrote a simple Haskell library to help explore these systems (found [here](https://github.com/queue-miscreant/GenBase)). -The [next post]() will discuss quadratic polynomials with larger coefficients than 1, and problems not discussed with higher expansions. +The [next post](../2) will discuss quadratic polynomials with larger coefficients than 1, and problems not discussed with higher expansions. diff --git a/polycount/2/index.qmd b/polycount/2/index.qmd index 53fdfef..93dea48 100644 --- a/polycount/2/index.qmd +++ b/polycount/2/index.qmd @@ -3,9 +3,13 @@ title: "Polynomial Counting: Binary and beyond" format: html: html-math-method: katex +date: "2021/02/05" +categories: + - algebra + - binary --- -This post assumes you have read [the one prior](1), which introduces generalized polynomial counting. +This post assumes you have read [the one prior](../1), which introduces generalized polynomial counting. Before I start, I'd like to introduce some shorthand. Since we prefer (monic) polynomials which may correspond to linear recurrences, it is useful to use an ordered tuple of their coefficients. @@ -329,5 +333,5 @@ This polynomial belongs to a family called which have complex roots of 1 as their roots. I'll have more to say about cyclotomic polynomials in the future, but they cannot be carries by themselves. -Since higher numbers appearing in carries are somewhat scary, the [next post]() will +Since higher numbers appearing in carries are somewhat scary, the [next post](../3) will focus on two more generalizations of the Fibonacci numbers and exceptions to the above rules.