Skip to content
Snippets Groups Projects
  1. Nov 04, 2019
  2. Nov 03, 2019
  3. Nov 02, 2019
  4. Nov 01, 2019
  5. Oct 31, 2019
    • Braden MacDonald's avatar
    • Ned Batchelder's avatar
      Merge pull request #19441 from danialmalik/pdf_viewer_static_url_fix · b9563aca
      Ned Batchelder authored
      Fix static urls in pdf_viewer.html to correctly display PDF viewer for textbooks
      b9563aca
    • Jeremy Bowman's avatar
      a6b8cbe6
    • Feanil Patel's avatar
      Merge pull request #22149 from edx/feanil/update_rounding · 15a7f3d4
      Feanil Patel authored
      BOM-738 - Review and update rounding for python 3
      15a7f3d4
    • Bill DeRusha's avatar
      Merge pull request #22202 from edx/bderusha/revert-PR-22152 · d9506c1b
      Bill DeRusha authored
      REVERT PR #22152 88e7589a
      d9506c1b
    • Awais Jibran's avatar
      Adding `ContextualizeTextError`. · 5e11708e
      Awais Jibran authored
      5e11708e
    • Feanil Patel's avatar
      Update code to use the new rounding method in course_grades. · facd737e
      Feanil Patel authored
      So making this code change took a few hours. But then deciding that it
      was the right one of the many options available took the next 3 days.
      
      When changing to the new rounding function, we had a test that started
      failing.  It appears as if our new rounding function is not the same in
      some way as the one built into python 2.
      
      ```
      >>> round(.0045*100 + .05)/100
      0.0
      >>> round_away_from_zero(.0045*100 + .05)/100
      0.01
      ```
      
      Doing the math by hand we see that the new function is actually correct
      but the old one is clearly rounding incorrectly in this case. Looking
      closer at this I discovered that it was due to a floating point issue
      where .0045*100 is represented as 0.44999999999999996 so when we add
      0.05 to this number we get 0.49999999999999994.  This is all because of
      the limitations of floating point arithmetic.
      
      See https://docs.python.org/3/tutorial/floatingpoint.html#tut-fp-issues
      for more on that.
      
      Because python does its rounding at the bit level in C code.  It treats
      the .4999... as below the .5 cutoff and rounds down. Whereas our code
      does more simple arithmetic which causes the number to correct itself
      before we round and so correctly rounds up to 0.01
      
      The result of this change is that previously, the rounding threshold used to
      be that any number > .0045 would ronud to 0.01 and now any number that
      is >= .0045 rounds to 0.01
      
      Note that if we only care about the two most significant digits of
      number between 0 and 1, this error only manifests itself in such a way
      that other than the case of going from 0.00 to 0.01 eg. from 0% to 1%
      none of the other cases where we would now round up cause the 2 most
      significant digits to change.  Given this level of impact, we're fine
      with this change.
      
      In our tests we see this for one case, where an incomplete turns into an
      F in a test.  I'm updating the test here to be more correct.
      
      As we were looking at it we speculated as to why we were adding the .05
      to the number.  Could it be to counteract this floating point issue?  It
      turns out not.
      
      Looking at this commit(a1286b1c) we see that it
      looks like this was intended to always round up to the nearest
      percentage point.  However, there's a typo here.  If you wanted to
      ensure that we always rounded up to the nearest percentage point you
      would have the math be `round(final_grade_percent*100 + 0.5)/ 100` or a
      simpler way to do this would be
      `math.ceil(final_grade_percent*100)/100`.  However, that is not what
      happened and 7 years later, there have been a lot of people graded with
      the wrong rounding where essentialy anyone with a grade of 89.45 gets a
      90 when the intended impact was supposed to be that anyone with a grade
      above an 89.0 would get a grade of 90.
      
      Changing it now requires a lot of conversation and wolud have a large
      impact on existing learners.  So we are not going to change it as a part
      of the python 2 -> python 3 upgrade.  I have created
      https://openedx.atlassian.net/browse/TNL-6972  to capture this issue if
      we want to address it in the future.
      facd737e