Господа, кто-нибудь в курсе, существует ли extention для PHP, реализующее работу с бесконечными целыми числами?
Ну, т.е. чтобы формат подразумевал динамическое выделение такого участка памяти под хранение числа, чтобы оно в него поместилось.

И чтобы он умел складывать, вычитать и умножать и делить. Деление тоже целочисленное — чтобы возвращало два целых — результат и остаток от деления.

23 Responses to extention для PHP, реализующее работу с бесконечными целыми числами?

  1. Kseblack:

    Спасибо. Почитал, сейчас попробую.

    Жалко только, что у неё все числа только в строках живут.

    Т.е. как я понимаю, например, при вычислении $a = ($b + $c) * ($d + $e)

    сперва b,c,d,e будут перекинуты из строкового представления во внутреннее, потом каждая сумма будет из внутреннего представления перекинута обратно в строковое, потом оба этих строковых представления будут перекинуты во внутреннее, а после умножения результат снова будет перекинут в строковое.

    Опасаюсь, что на все эти ненужные хреновины основное время будет тратиться. Было бы круто, если бы экземпляр числа был каким-то специальным объектом, который всегда хранит данные во внутреннем представлении и оперирует им, а строковое человеческое представление как раз возвращал бы только по специальной просьбе.

  2. Vormo:

    ну как минимум $a = bcmul(bcadd($b, $c), bcadd($d, $e))

  3. Kseblack:

    Беру слова обратно. Охуенно работает.

  4. WebDev:

    *голосом Василия Уткина*
    в этом итт треде программисты на ппхпххпхпхпхп ищут либу для длинной арифметики, без которой обходятся даже школьники на олимпиадах. на втором комменте подходит к осознанию необходимости использования BCD, но так и не может сделать решающий шаг.

  5. Kseblack:

    Stephan-V: Мне длинная целая арифметика нужна для хранения промежуточных резульататов в рациональных дробях, что по возможности старается делать любая хоть немного уважающая себя софтина, начиная с виндового калькулятора.

    А сейчас по ряду причин нужно, увы, на PHP. Я его и впрямь мало знаю, у меня был стандартный путь программера,
    начинающего писать подростком в разгар перестройки -> spectrum basic -> turbo pascal & tasm -> C / C++, сейчас в основном C# и java.

  6. WebDev:

    тогда тебе не о чем беспокоиться: тормоза от самого факта использования php таковы, что об использовании строк вместо BCD волноваться не приходится

  7. AmtEkb:

    ты так говоришь «увы», как будто бы между php и другими языками программирования (например, теми же turbo pascal, C++ или java) есть какая-то разница.

  8. 5auam:

    да вообще нкиакой.

  9. Kseblack:

    Это «увы» из области личных предпочтений. Меня раздражает динамическая типизация и общая неряшливость. Лично мне, чтобы чисто писать на PHP, требуется очень напрягать самодисциплину и самостоятельно следить за теми вещами, за которыми обычно следит компилятор. Не готов обосновать своё мнение.

  10. AmtEkb:

    странно, учитывая trubo pascal & tasm в послужном списке.
    Мне напрягать ничего не требуется, я на любом языке слежу за всем, чем могу и что знаю. После асма как-то само собой развилось.

  11. 5auam:

    динамическая типизация развивает самоконтроль.

  12. AmtEkb:

    вообще человек, который не знает, что делает компьютер, выполняя его код, есть быдлокодер.

  13. Kseblack:

    Мне кажется, как раз асм и PHP вообще на разных полюсах именно в этом смысле. Т.е. PHP меня раздражает тем, что всё прощает и молча принимает самостоятельные решения в меру своего «понимания» текущего контекста, а асм за программиста не сделает вообще ничего. Поэтому асм как раз заставлял следить. А в PHP приходится самостоятельно. Скажем, если в asm-е у тебя где-то переполнение целого, ты это быстро заметишь. А PHP тихо и молча перейдёт на плавающую точку. С погрешностью. А потом ебись часами и думай, откуда у тебя одна лишняя копейка нарисовалась в таблице с суммами.

  14. AmtEkb:

    всё это у тебя в голове 🙂 я пишу не программу на предоставленном языке, я пишу команды для процессора, используя предоставленные языком или написанные собственноручно обёртки для этих асм-команд. Удобно, когда обёртки высокоуровневые, типа как в java, но удобство не должно затмевать основной мысли.

  15. 5auam:

    вы пытаетесь прострелить себе ногу, но обнаруживаете, что прежде вам придется изобрести пистолет, пулю, курок и вашу ногу.

    в PHP есть явное приведение типов. нужно контролировать контекст и то, что хочешь получить — тогда не возникает проблем в таблице с суммами (более того, работа с финансами вообще должна прививать жёсткий контроль и заставлять вводить кучу ограничений даже там, где по идее не ожидается никаких проблем).

  16. AmtEkb:

    ещё есть assert() и контрактное программирование.

  17. WebDev:

    в эрланге длинная арифметика из коробки работает только для целых чисел. для дробных там та же самая хуйня

  18. Kseblack:

    Stephan-V: А мне для целых и надо, я же с рациональным дробями работаю.

  19. WebDev:

    ну попробуй эрланг, он строгий и красивый

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