Uploaded image for project: 'Daffodil'
  1. Daffodil
  2. DFDL-1714

ULong modulus operator broken

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 2.0.0
    • Fix Version/s: deferred
    • Component/s: General, Libraries
    • Labels:
      None

      Description

      It appears that the ULong modulus operator is broken. If we run this code:

          for (i <- 0 to 16 ) {
            val numerator = ULong(i)
            val denominator = ULong(8)
            val remainder = numerator % denominator
            println(i + " % 8 = " + remainder)
          }

      we get the result:

      0 % 8 = 0
      1 % 8 = 1
      2 % 8 = 2
      3 % 8 = 3
      4 % 8 = 4
      5 % 8 = 5
      6 % 8 = 6
      7 % 8 = 7
      8 % 8 = 8
      9 % 8 = 9
      10 % 8 = 10
      11 % 8 = 11
      12 % 8 = 12
      13 % 8 = 13
      14 % 8 = 14
      15 % 8 = 15
      16 % 8 = 0

      Anything % 8 should always be less than 8. But some results are greater than 8. Not sure exactly what is going on, and the generated bytecode is really hard to follow. In fact, I wouldn't be surprised if ULongs are actually slowing things down. The byte code was kindof a mess. We might want to revisit ULongs and how else to support > 4GB files.

        Gliffy Diagrams

          Attachments

            Activity

              People

              Assignee:
              Unassigned Unassigned
              Reporter:
              slawrence Steve Lawrence
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Dates

                Created:
                Updated:

                  Tasks

                  Progress: 
                   0/0