1. Си / Говнокод #25397

    0

    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
    // https://github.com/alpertron/calculators/blob/15607feafb0ddb1c075bb326dc6ea2224a4c50bb/siqs.c#L3720
    
                switch (NumberLengthA)
                {
                case 7:
                  dRem = (double)*(piDividend + 6) * (double)rowPrimeTrialDivisionData->exp6 +
                    (double)*(piDividend + 5) * (double)rowPrimeTrialDivisionData->exp5 +
                    (double)*(piDividend + 4) * (double)rowPrimeTrialDivisionData->exp4 +
                    (double)*(piDividend + 3) * (double)rowPrimeTrialDivisionData->exp3 +
                    (double)*(piDividend + 2) * (double)rowPrimeTrialDivisionData->exp2 +
                    (double)*(piDividend + 1) * (double)rowPrimeTrialDivisionData->exp1;
                  break;
                case 6:
                  dRem = (double)*(piDividend + 5) * (double)rowPrimeTrialDivisionData->exp5 +
                    (double)*(piDividend + 4) * (double)rowPrimeTrialDivisionData->exp4 +
                    (double)*(piDividend + 3) * (double)rowPrimeTrialDivisionData->exp3 +
                    (double)*(piDividend + 2) * (double)rowPrimeTrialDivisionData->exp2 +
                    (double)*(piDividend + 1) * (double)rowPrimeTrialDivisionData->exp1;
                  break;
                case 5:
                  dRem = (double)*(piDividend + 4) * (double)rowPrimeTrialDivisionData->exp4 +
                    (double)*(piDividend + 3) * (double)rowPrimeTrialDivisionData->exp3 +
                    (double)*(piDividend + 2) * (double)rowPrimeTrialDivisionData->exp2 +
                    (double)*(piDividend + 1) * (double)rowPrimeTrialDivisionData->exp1;
                  break;
                case 4:
                  dRem = (double)*(piDividend + 3) * (double)rowPrimeTrialDivisionData->exp3 +
                    (double)*(piDividend + 2) * (double)rowPrimeTrialDivisionData->exp2 +
                    (double)*(piDividend + 1) * (double)rowPrimeTrialDivisionData->exp1;
                  break;
                default:
                  dRem = (double)*(piDividend + 2) * (double)rowPrimeTrialDivisionData->exp2 +
                    (double)*(piDividend + 1) * (double)rowPrimeTrialDivisionData->exp1;
                  break;
                }

    Generic two integer variable equation solver
    This calculator can solve equations of the form a⁢x² + b⁢x⁢y + c⁢y² + dx + ey + f = 0 where the unknowns x and y are integer numbers.

    Запостил: j123123, 22 Февраля 2019

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

    • Жопа тут еще в том, что и *piDividend имеет тип int
      https://github.com/alpertron/calculators/blob/15607feafb0ddb1c075bb326dc6ea2224a4c50bb/siqs.c#L3596



      и rowPrimeTrialDivisionData->exp1, rowPrimeTrialDivisionData->exp2, итд ... имеют тип int
      https://github.com/alpertron/calculators/blob/45a846ed174172c86eb076296b36c2c4d994c485/commonstruc.h#L39



      Ну т.е. их вообще нахуй не надо в плавучку пихать, это блядь бессмысленно.
      Ответить
      • Может быть ради временных переполнений? Когда во время вычислений получаются огромные числа, а результат в итоге входит в инт.

        З.Ы. Хотя, с другой стороны, из-за плавучки там всё уплывёт и получится кривой ответ. int64 с проверкой на переполнения после каждой операции всяко будет лучше дабла...
        Ответить
    • Хуйня какая-то. Вот если бы оно в компайлтайме эти уравнения решало...
      Ответить
      • ... то оно бы их решало сильно дольше, чем в рантайме. Потому что компилятор в компилтайме работает в режиме говноинтерпретатора. Надо в компилтайм добавить JIT с оптимизациями и GC
        Ответить
        • > GC
          И чтобы выжившие после финального GC объекты падали в секцию констант. Было бы удобно.
          Ответить
    • Вообще, эта хуйня через emscripten вроде как компилируется в JS. Может быть поэтому там плавучие питухи используются? Ведь в JS арифметика только на плавучих питухах работает
      Ответить

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