JuliaLang/julia

Document promotion behavior of `div` and `divrem` for `(::Unsigned, ::Signed)`

Open

#57.855 aperta il 21 mar 2025

Vedi su GitHub
 (8 commenti) (0 reazioni) (0 assegnatari)Julia (5773 fork)batch import
docshelp wanted

Metriche repository

Star
 (48.709 star)
Metriche merge PR
 (Merge medio 23g 11h) (145 PR mergiate in 30 g)

Descrizione

Currently we have

julia> div(UInt(1), -1)
0xffffffffffffffff

This happens because we are returning the promote_type, but violates both common sense, and the documentation which states "Generally equivalent to a mathematical operation x/y without a fractional part".

As such, I propose that we instead make the return type of div(x,y) be ifelse(isa(y, Signed), signed(promote_type(x,y)), promote_type(x,y)). This would obviously be slightly breaking, but I think it qualifies as a bugfix.

We also would want to make similar changes for divrem, fld, cld since they all have the same problem.

Guida contributor