Tidal represents time as rational numbers so musical subdivisions are stored exactly as fractions without floating-point error
Tidal uses Haskell’s Rational type for time values, meaning time is represented as exact fractions (1/3, 3/8, etc.) rather than floating-point decimals. This is musically significant: floating-point time accumulates rounding errors, which causes timing drift over long sequences. Rational time avoids this entirely. The underlying assumption is that music is structured as rhythmic cycles — a belief supported across many music traditions including Indian classical music. The ‘sam’ (first beat of each cycle) is the anchoring reference point. This architecture makes polyrhythms natural to express: any rational subdivision of the cycle is exact.
Examples
E(3,8) expressed as rational offsets 0, 3/8, 3/4 — each stored exactly; no drift after 1000 cycles. Float alternative: 0, 0.375, 0.749999… accumulating error.
Assessment
Explain why Rational is preferable to Float for representing musical time; describe what a ‘sam’ is and why it matters for polyrhythm.