Блог пользователя Chef_Ka_Baap

Автор Chef_Ka_Baap, история, 4 года назад, По-английски

ceil((double)x/n); x <= 10^12 and n <10^6; can anyone provide a test case or something I got hacked many times but was unable to find a mistake

  • Проголосовать: нравится
  • -3
  • Проголосовать: не нравится

»
4 года назад, # |
  Проголосовать: нравится +15 Проголосовать: не нравится

I can give you a reason why it can be wrong: because of how doubles are stored (IEEE 754), they might not be accurate, and that can lead to inaccurate result

if you want ceil, then use (x + n - 1) / n

  • »
    »
    4 года назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    is there any test case to show this i am unable to find one

    • »
      »
      »
      4 года назад, # ^ |
        Проголосовать: нравится +2 Проголосовать: не нравится

      it fails for bigger number like if you try to do 100000000000000001/100000000000000000 it will give you 1 directly but ceil of this should be 2

  • »
    »
    4 года назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    but if we give by this method ie (x+n-1)/n then wont it lead to overflows due to addition?

    • »
      »
      »
      4 года назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      yes

    • »
      »
      »
      4 года назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится

      I don't think any problem setter would be that evil.

      Also, if you are afraid of overflow, you can try x / n + (x % n != 0), although it requires more divisions, which is slower and uglier (but I guess it's easier to understand).

      And, __int128 is also an option as well, you can have a look at it.