# Invalidations caused by FixedPointNumbers

**URL:** <https://discourse.julialang.org/t/invalidations-caused-by-fixedpointnumbers/139232>\
**Category:** Internals & Design\
**Tags:** question, package, mtk, fixedpointnumbers\
**Created:** [September 6, 2026, 12:34pm UTC](https://discourse.julialang.org/t/invalidations-caused-by-fixedpointnumbers/139232 "2026-09-06T12:34:30Z")\
**Posts on this page:** 1\
**Showing post:** 6

<div class="post-metadata">

**Author:** ![kimikage](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kimikage/32/14534_2.png) [@kimikage](https://discourse.julialang.org/u/kimikage)\
**Post date:** [October 10, 2026, 12:25am UTC](https://discourse.julialang.org/t/invalidations-caused-by-fixedpointnumbers/139232/6 "2026-10-10T00:25:32Z")

</div>

@ufechner7

SymbolicUtils.jl v4.50.0 has been released, incorporating:

> <https://github.com/JuliaSymbolics/SymbolicUtils.jl/pull/1127>
>
> Follow-up to the type-stability note in https://github.com/JuliaSymbolics/Symbol…icUtils.jl/issues/1101#issuecomment-5884776264.
> 
> The \`sqrt\`/\`cbrt\` branches of \`^\` computed \`b::Rational // 2\` (and \`// 3\`). In the \`^(::BasicSymbolic, ::Number)\` specialization, that makes inference go through \`//(::Rational, ::Int64)\` with an abstract \`Rational\`. That call has a backedge to \`checked\_mul(::Integer, ::Any)\` (JuliaLang/julia#63455), and FixedPointNumbers 0.9 adds a \`checked\_mul\` method, so loading it invalidated \`^\` and everything inferred through it. \`b // 2\` behaves the same at runtime, since it dispatches on the concrete \`Rational\`, but inference no longer specializes \`//\` on the abstract type: SymbolicUtils compiles with \`max\_methods=1\`, and \`(Number, Int)\` matches three \`//\` methods, so the call is left dynamic.
> 
> \*\*Measured\*\* with SnoopCompileCore and FixedPointNumbers 0.9.1 against current master (v4.49.0): distinct SymbolicUtils method instances invalidated by \`using FixedPointNumbers\` after a small \`^\` workload.
> 
> | Julia | master | this PR |
> |---|---|---|
> | 1.12.7 | 83 (70 of them in the \`checked\_mul\` tree, all entering at \`^(::BasicSymbolic, ::Number)\` → \`//(::Rational, ::Int64)\`) | 13 |
> | 1.13.1 | 1163 | 1163 |
> 
> On 1.13.1 the \`checked\_mul\` tree is gone too, but a separate tree rooted at FixedPointNumbers' \`length(::StepRange{X, X})\` invalidates 1159 method instances through \`Dict{…, StepRange}\` operations, \`^\` included. This PR doesn't address that one.
> 
> \*\*Tests:\*\* none added, because behaviour is unchanged (the \`sqrt\`/\`cbrt\` folds give identical results before and after). There's no automated invalidation test either, since the counts depend on the Julia version and on what has been compiled. On the merged branch I ran \`basics\`, \`methods\` and \`rulesets\` on Julia 1.10.12 and 1.12.7; before the merge, \`polyform\` (both versions) and \`fuzz\` (1.12.7) passed too. I did not run the full suite.
> 
> 🤖 Generated with \[Claude Code\](https://claude.com/claude-code)

How does it work when combined with FixedPointNumbers.jl v0.9.2?

---

_[View the full topic](https://discourse.julialang.org/t/invalidations-caused-by-fixedpointnumbers/139232)._
