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

Автор beatoriche, история, 9 лет назад, По-русски

Современные процессоры выполняют умножения намного быстрее делений, потому что разработчики процессоров больше уделяют этому внимания, да и просто легче распарралеливаются в кремнии. Вот способ замены двух делений на одно деление и несколько умножений с небольшой потерей точности:

http://stereopsis.com/2div.html

Подобным образом можно заменить и три, и четыре деления на одно...

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

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

Auto comment: topic has been translated by beatoriche(original revision, translated revision, compare)

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

Nice idea...

But I think this will be useful just when we have lots of divides so the program will be slow...But in this situation we can't use any variable to put 1/(a[0]*a[1]*...) in it...(if we want to use just one divide)

So we can just decrease the number of divides(but not to 1)...But does it help in speed a lot?

I'm a beginner and it was just a question...If I'm wrong you can tell me...

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

    The proper way to determine is TESTING. It depends on particular compiler and CPU.

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

      Ok...

      I did it...

      Test

      I didn't except slower program...But why?

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

        cout is slow. Printing anything is slow, don't do it when comparing speed of programs.

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

          Ok thank you for that point...

          I did it without printing too and just put results in array...

          For N=1e5 not any differences...

          But it was 1s better for N=1e6...(3.95 vs 4.5)

          I know it should have better time but I still think it won't be useful(exactly in CF cause time limits are usually 1s and integer limits are not 1e6 for this problems)

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

        which type is 'll'? long long? it's for floating point only, unfortunately

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

          "ll" is long long but I used "(ld)" in my code...It's long double...

          Ans also in my test without printing I used a "long double" array for result so not any problem...

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

Автокомментарий: текст был обновлен пользователем beatoriche (предыдущая версия, новая версия, сравнить).