Ess
и у decimal и у mpmath задана точность округления 50 знаков
Ну да, и поэтому mpmath выводит какую-то лишнюю ерунду. Для чего указывается фиксированная точность? Для того, чтобы дальше ничего не считалось и выводилось столько, сколько задали в этой точности. Ну decimal так и делает. А что же делает mpmath? Оно берёт эту точность, вычисляет, а потом ещё берёт что-то дополнительно после этой точности. Зачем? Она как считает, для чего ей точность задали, ограниченную вот дотуда-то? Просто так что ли? Или что? Поэтому сразу видно, что человек, который писал, у него что-то не то с головой, потому что он не понимает, зачем указывают точность. Во всех языках при указании точности последнюю цифру просто округляют по тем цифрам, которые дальше идут, за пределами заданной точности, и всё.
Я же показал, я задаю 50, а оно выводит 55 знаков (отнимаем “0.”, получается 53 знака). С чего вдруг-то? В то же время decimal выводит столько, сколько ему задали. Он выводит 52, но два идут на точку и на E, а остальные 50 идут только на все цифры мантиссы. Поэтому decimal прав, а вот этот вот mpmath какой-то творческий дурачок писал.
Вот, почитай философию UNIX по созданию программ
wiki. философия UNIXИ там есть такое правило
wiki. правило наименьшего удивленияВот ты задаёшь точность 50, а mpmath выводит тебе 55. А если ты задашь ей 100, она сколько выведет? будешь играть в угадайку? Так вот такого быть не должно. Поэтому decimal сделан умнее, чем mpmath, так как он выводит то, что ему заказывают, и не удивляет пользователя.
А что такое “удивление” пользователя? Это ты берёшь и тратишь время пользователя на то, чтобы пользователь сначала проверил, как там твоя программа тупая работает, которой он решил попользоваться, потому что сразу понять и предсказать её поведение без каких бы то ни было проверок он не может, так как твоя программа постоянно подбрасывает ему сюрпризы то тут, то там.
Ну, например, вот пример из жизни. Ты садишься за комп, включаешь его, чтобы поработать на нём, виндовс загружается и раз и начинает выполнять обновление системы, которое ты не просил выполнять. И ты сидишь ждёшь это колечко, которое тебе два часа говорит “подождите немного, идёт обновление”. Вот оно тебе надо? Ты - пользователь, тебе оно нафиг не надо, тебе надо Word открыть и набирать документ, потому что его сдавать через три часа. А ты не можешь Word открыть, потому что эта херня делает вообще что-то другое, чего ты не ждал и чего тебе не надо было. А после обновления виндовс ты ждёшь каких-то новшеств, обновление же не просто так произошло и ты не просто так его ждал вместо своих дел. Ты смотришь и опять удивляешься - разницы ты вообще не видишь никакой. И вот ты в итоге удивился тому, как ты три часа просидел за компом, а в документе, нужном тебе, не набрал ни строчки. Какая-то параша обновилась только за счёт твоего времени. Это вот то, почему Windows - говно, а UNIX - легенда.
Кстати, обрати внимание, что с decimal также легко работать, в то время как с mpmath нужно какие-то переменные создавать дополнительные, чтобы просто понятный и полный результат выводить. Это о чём говорит? Это говорит о том, что разработчик mpmath не очень-то шарит в программировании и вообще с нормальными программами не работал, поэтому и не знает, что такое удобные программы и свою такой же сделать не может. О вкусе устриц может размышлять только тот, кто их уже ел. А у decimal с этим всё в порядке, поэтому там и не нужно никаких дополнительных переменных создавать, а достаточно просто одной строчки, чтобы всё вывести сразу. Это вот неявные признаки того,
что лучше написано. Когда ты программист, ты их видишь. Когда ты не программист, ты нихрена не видишь и думаешь, что умнее то, где надо больше всего “умного” писать. Это как в винде: умнее тот, кто больше всего часов просидел и впустую пропялился в кругляшки на экране.