1. Pascal / Говнокод #2831

    +100.2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    V := +2*C.C[SFX+S1]/DT-2*C.C[SFX+S4]/DT+1*C.C[SFXY+S1]/(DT*DU)+1*C.C[SFXY+S4]/(DT*DU);
            F := F+V*T1*U3;
            FX := FX+1*V*T0*U3*DT;
            FY := FY+3*V*T1*U2*DU;
            FXY := FXY+3*V*T0*U2*DT*DU;
            V := -3*C.C[SF+S1]+3*C.C[SF+S2]-2*C.C[SFX+S1]/DT-1*C.C[SFX+S2]/DT;
            F := F+V*T2*U0;
            FX := FX+2*V*T1*U0*DT;
            V := -3*C.C[SFY+S1]/DU+3*C.C[SFY+S2]/DU-2*C.C[SFXY+S1]/(DT*DU)-1*C.C[SFXY+S2]/(DT*DU);
            F := F+V*T2*U1;
            FX := FX+2*V*T1*U1*DT;
            FY := FY+1*V*T2*U0*DU;
            FXY := FXY+2*V*T1*U0*DT*DU;
            V := +9*C.C[SF+S1]-9*C.C[SF+S2]+9*C.C[SF+S3]-9*C.C[SF+S4]+6*C.C[SFX+S1]/DT+3*C.C[SFX+S2]/DT-3*C.C[SFX+S3]/DT-6*C.C[SFX+S4]/DT+6*C.C[SFY+S1]/DU-6*C.C[SFY+S2]/DU-3*C.C[SFY+S3]/DU+3*C.C[SFY+S4]/DU+4*C.C[SFXY+S1]/(DT*DU)+2*C.C[SFXY+S2]/(DT*DU)+1*C.C[SFXY+S3]/(DT*DU)+2*C.C[SFXY+S4]/(DT*DU);
            F := F+V*T2*U2;
            FX := FX+2*V*T1*U2*DT;
            FY := FY+2*V*T2*U1*DU;
            FXY := FXY+4*V*T1*U1*DT*DU;
            V := -6*C.C[SF+S1]+6*C.C[SF+S2]-6*C.C[SF+S3]+6*C.C[SF+S4]-4*C.C[SFX+S1]/DT-2*C.C[SFX+S2]/DT+2*C.C[SFX+S3]/DT+4*C.C[SFX+S4]/DT-3*C.C[SFY+S1]/DU+3*C.C[SFY+S2]/DU+3*C.C[SFY+S3]/DU-3*C.C[SFY+S4]/DU-2*C.C[SFXY+S1]/(DT*DU)-1*C.C[SFXY+S2]/(DT*DU)-1*C.C[SFXY+S3]/(DT*DU)-2*C.C[SFXY+S4]/(DT*DU);
            F := F+V*T2*U3;
            FX := FX+2*V*T1*U3*DT;
            FY := FY+3*V*T2*U2*DU;
            FXY := FXY+6*V*T1*U2*DT*DU;
            V := +2*C.C[SF+S1]-2*C.C[SF+S2]+1*C.C[SFX+S1]/DT+1*C.C[SFX+S2]/DT;
            F := F+V*T3*U0;
            FX := FX+3*V*T2*U0*DT;
            V := +2*C.C[SFY+S1]/DU-2*C.C[SFY+S2]/DU+1*C.C[SFXY+S1]/(DT*DU)+1*C.C[SFXY+S2]/(DT*DU);
            F := F+V*T3*U1;
            FX := FX+3*V*T2*U1*DT;
            FY := FY+1*V*T3*U0*DU;
            FXY := FXY+3*V*T2*U0*DT*DU;
            V := -6*C.C[SF+S1]+6*C.C[SF+S2]-6*C.C[SF+S3]+6*C.C[SF+S4]-3*C.C[SFX+S1]/DT-3*C.C[SFX+S2]/DT+3*C.C[SFX+S3]/DT+3*C.C[SFX+S4]/DT-4*C.C[SFY+S1]/DU+4*C.C[SFY+S2]/DU+2*C.C[SFY+S3]/DU-2*C.C[SFY+S4]/DU-2*C.C[SFXY+S1]/(DT*DU)-2*C.C[SFXY+S2]/(DT*DU)-1*C.C[SFXY+S3]/(DT*DU)-1*C.C[SFXY+S4]/(DT*DU);
            F := F+V*T3*U2;
            FX := FX+3*V*T2*U2*DT;
            FY := FY+2*V*T3*U1*DU;
            FXY := FXY+6*V*T2*U1*DT*DU;
            V := +4*C.C[SF+S1]-4*C.C[SF+S2]+4*C.C[SF+S3]-4*C.C[SF+S4]+2*C.C[SFX+S1]/DT+2*C.C[SFX+S2]/DT-2*C.C[SFX+S3]/DT-2*C.C[SFX+S4]/DT+2*C.C[SFY+S1]/DU-2*C.C[SFY+S2]/DU-2*C.C[SFY+S3]/DU+2*C.C[SFY+S4]/DU+1*C.C[SFXY+S1]/(DT*DU)+1*C.C[SFXY+S2]/(DT*DU)+1*C.C[SFXY+S3]/(DT*DU)+1*C.C[SFXY+S4]/(DT*DU);

    библиотека http://alglib.sources.ru/
    модуль spline2d.pas
    произвольный кусочек кода

    Запостил: MrShoor, 20 Марта 2010

    Комментарии (20) RSS

    • Суслики атакуе.
      Ответить
    • какая-то неведомая математическая хуйня, наверное, так и должно быть.
      Ответить
      • Очевидно, что да. И это ни разу не говнокод. Возможно, это можно заоптимизировать. Но, если, блджад, формула на три страницы, как она должна выглядеть в реальности?
        Ответить
        • имхо, лучше полностью копировать такие замысловатые формулы из учебника, чем пытать их оптимизировать, потому что оптимизация таких замысловатых формул может повлечь ошибки, которые хрен отыщешь. все надеюсь помнят крушение американской ракеты из-за ошибки переноса физических формул с тетради в комп. чёрточку в одном месте забыли. и то это при чистом копировании. а если будет ещё и "самодеятельность"?
          Ответить
          • Вы это скажите тому несчастному кодеру, которому дали задачу оптимизировать данную фигню, чтобы она работала, скажем, раз в 10 быстрей.
            Иногда оптимизируют от нефиг делать, иногда - в силу суровой необходимости.
            А чтобы ракеты не падали - тестировать надо нормально.
            Ответить
      • да, я сам с свое время работал с разными мат.методами, в коде получается приблизительно то же самое, и по другому никак...

        так что с вероятностью 99% - не говнокод!
        Ответить
        • Вообще можно было хоть вектора и матрицы задействовать...
          Ответить
          • Зачем?
            Оптимизировать формулы себе дороже
            Ответить
        • хз, тут например много раз повторяется присвоение одной и той же переменной.

          V := -3*C.C[SF+S1]+3*C.C[SF+S2]-2*C.C[SFX+S1]/DT-1*C.C[SFX+S2]/DT;
          ...
          V := -3*C.C[SFY+S1]/DU+3*C.C[SFY+S2]/DU-2*C.C[SFXY+S1]/(DT*DU)-1*C.C[SFXY+S2]/(DT*DU);

          как минимум у каждой такой операции видимо есть смысл, и как минимум можно было бы проставить коменты. а еще вычисление каждой херни видимо можно было обозвать завернув в функцию.

          типа V := calculateSomething(a, b, c) уже было бы куда понятнее.

          На сайте с примерами реализации алгоритмов по моему куда важнее донести смысл алгоритма, чем заоптимайзить его выполнение с 200 мс до 174 (к примеру)

          так что учитывая происхождение, 100% говнокод
          Ответить
    • кстати, так же как и код поражает своей лаконичностью, по коду расставлены коментари которые прямо таки жгут напалмом:
      //
          // Special case: N=1
          //
          if N=1 then
          begin
              Exit;
          end;

      особый такой вот случай.

      //
          // Sort points
          //
          HeapSortPoints(X, Y, N);

      капитан очевидность как бы намекает

      //
          // Solve
          //
          SolveTridiagonal(A1, A2, A3, B, N, D);

      Решить!!!
      Ответить
    • не понял, "C.C" - это название массива, что ли? насколько я в курсе, в Паскале нельзя использовать точку в именах переменных. wtf?
      Ответить
      • может быть массив в структуре (или как там у говновирта это называется)
        Ответить
    • Наших обижае, поддержите:
      http://www.govnokod.ru/2822
      Ответить
    • Настоящий физик на любом языке программирования напишет программу на Фортране. :-)
      Была у меня давно книжка по компьютерной графики с примерами на Фортране - один в один. :-) Алгоритмы хитрые - программы соответствующие.
      Ответить
    • воняет фотраном...
      Ответить
    • - Может пойдем куда-нибудь? Ну, в укромное место...
      Ответить

    Добавить комментарий