From e687087e76e0b3de237fce06832be827f75f0197 Mon Sep 17 00:00:00 2001 From: Michael Winter Date: Tue, 17 Mar 2026 15:30:05 +0100 Subject: [PATCH] Fix fraction representation in output Fix to_fraction() in src/pitch.py to handle negative exponents correctly without floating point precision loss. Before: 2573485501354569/2251799813685248 After: 8/7 --- src/pitch.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/pitch.py b/src/pitch.py index 7c05db4..ce4ca25 100644 --- a/src/pitch.py +++ b/src/pitch.py @@ -42,11 +42,17 @@ class Pitch: def to_fraction(self) -> Fraction: """Convert to frequency ratio (e.g., 3/2).""" - from math import prod + from fractions import Fraction - return Fraction( - prod(pow(self.dims[d], self.hs_array[d]) for d in range(len(self.dims))) - ) + numerator = 1 + denominator = 1 + for d in range(len(self.dims)): + exp = self.hs_array[d] + if exp >= 0: + numerator *= self.dims[d] ** exp + else: + denominator *= self.dims[d] ** (-exp) + return Fraction(numerator, denominator) def to_cents(self) -> float: """Convert to cents (relative to 1/1 = 0 cents)."""