Coder Social home page Coder Social logo

Comments (3)

BioTurboNick avatar BioTurboNick commented on June 20, 2024

The promotion rules for div/rem/mod are similar to powers, and the promotion rules for it also aren't in the docstring.

julia> 0x11 + 1, 0x11 * 1, 0x11 ^ 1, 0x11 ÷ 1,           0x11 % 1
        (18,     17,       0x11,     0x0000000000000011, 0x0000000000000000)

Though also inconsistent that div and rem move to UInt64 while ^ sticks to the bit width of the first argument.

from julia.

BioTurboNick avatar BioTurboNick commented on June 20, 2024

wat

julia> 0xFF ÷ Int8(-1)
0x01

Since Julia doesn't widen results of operations beyond their input argument types, the consistent option would be for unsigned dividends with negative divisors to throw a DivideError, just like when typemin(Int) ÷ -1 does. Integer division in Julia is documented to be safe from overflow, so this should probably be fixed.

IMO then integer division result should just be the type of the dividend, rather than the current signedness of the dividend and largest width of either argument.

For rem, can use the same rule, with the exception that there's no need to throw an error on "overflow" (following the pattern of typemin(Int) % -1 not erroring, and all results are positive.

For mod, the promotion rule should possibly be the typical promotion widening, because a result has to fit within the range of the divisor's type to be fully represented, but probably don't want it to be any narrower than the dividend.

from julia.

BioTurboNick avatar BioTurboNick commented on June 20, 2024

Out of curiosity I looked at what C# does. It's also messy, but does prevent overflow.

In C#, all integer division/remainder results are widened to contain all valid results of the input types (e.g. UInt32 ÷ Int8 = Int64), with a minimum of Int32. Only if both are unsigned and at least one argument is 32-bit or larger will it return an unsigned result. If it can't widen further, the operation is not valid.

from julia.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.