• jayrhacker@kbin.social
    link
    fedilink
    arrow-up
    3
    ·
    1 year ago

    It’s the same in the the standard c library, so Java is being consistent with a real programming language…

  • korstmos@kbin.social
    link
    fedilink
    arrow-up
    2
    ·
    1 year 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
        1
        ·
        1 year 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).

    • parlaptie@feddit.de
      link
      fedilink
      arrow-up
      0
      arrow-down
      1
      ·
      1 year ago

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

  • Aelorius@jlai.lu
    link
    fedilink
    arrow-up
    1
    ·
    1 year ago

    Logic, in math, if you have a real and you round it, it’s always a real not an integer. If we follow your mind with abs(-1) of an integer it should return a unsigned and that makes no sense.

    • Kogasa@programming.dev
      link
      fedilink
      arrow-up
      1
      ·
      1 year ago

      in math, if you have a real and you round it, it’s always a real not an integer.

      No, that’s made up. Outside of very specific niche contexts the concept of a number having a single well-defined type isn’t relevant in math like it is in programming. The number 1 is almost always considered both an integer and a real number.

      If we follow your mind with abs(-1) of an integer it should return a unsigned and that makes no sense.

      How does that not make sense? abs is always a nonnegative integer value, why couldn’t it be an unsigned int?

  • Marek Knápek@programming.dev
    link
    fedilink
    arrow-up
    0
    ·
    1 year ago

    Makes sense, how would you represent floor(1e42) or ceil(1e120) as integer? It would not fit into 32bit (unsigned) or 31bit (signed) integer. Not even into 64bit integer.

      • 1rre@discuss.tchncs.de
        link
        fedilink
        arrow-up
        0
        arrow-down
        1
        ·
        1 year ago

        I feel this is worse than double though because it’s a library type rather than a basic type but I guess ceil and floor are also library functions unlike toInt