• korstmos@kbin.social
    link
    fedilink
    arrow-up
    51
    arrow-down
    1
    ·
    11 months ago

    Doubles have a much higher max value than ints, so if the method were to convert all doubles to ints they would not work for double values above 2^31-1.

    (It would work, but any value over 2^31-1 passed to such a function would get clamped to 2^31-1)

      • whats_a_refoogee@sh.itjust.works
        link
        fedilink
        arrow-up
        5
        ·
        11 months ago

        To avoid a type conversion that might not be expected. Integer math in Java differs from floating point math.

        Math.floor(10.6) / Math.floor(4.6) = 2.5 (double)

        If floor returned a long, then

        Math.floor(10.6) / Math.floor(4.6) = 2 (long)

        If your entire code section is working with doubles, you might not like finding Math.floor() unexpectedly creating a condition for integer division and messing up your calculation. (Have fun debugging this if you’re not actively aware of this behavior).

      • korstmos@kbin.social
        link
        fedilink
        arrow-up
        4
        ·
        11 months ago

        Because even a long (64-bit int) is too small :)
        A long can hold 2^64-1 = 1.84E19
        A double can hold 1.79E308

        Double does some black magic with an exponent, and can hold absolutely massive numbers!

        Double also has some situations that it defines as “infinity”, a concept that does not exist in long as far as I know (?)

    • parlaptie@feddit.de
      link
      fedilink
      arrow-up
      5
      arrow-down
      1
      ·
      11 months ago

      But there’s really no point in flooring a double outside of the range where integers can be represented accurately, is there.