Состоялся (http://morepypy.blogspot.ru/2018/04/pypy27-and-pypy35-v60-du...) выпуск проекта PyPy 6.0 (http://pypy.org/), в рамках которого развивается реализации языка Python, написанной на языке Python (используется статически типизированное подмножество RPython (http://doc.pypy.org/en/latest/coding-guide.html#id1), Restricted Python). Выпуск подготовлен одновременно для веток PyPy2.7 и PyPy3.5, обеспечивающих поддержку синтаксиса Python 2.7 и Python 3.5, и поставляемых с stdlib 2.7.13 и 3.5.3. Выпуск доступен для Linux (x86, x86_64, PPC64, s390x, ARMv6 или ARMv7 с VFPv3), macOS (x86_64), OpenBSD, FreeBSD и Windows (x86). PyPy3.5 5.10 отмечен как первый стабильный релиз ветки 3.5 для Linux и macOS (поддержка Windows пока имеет статус бета-версии).
Особенностью PyPy является использование JIT-компилятора, на лету транслирующего некоторые элементы в машинный код, что позволяет обеспечить высокий (http://speed.pypy.org/) уровень производительности - при выполнении некоторых операций PyPy в несколько раз обгоняет классическую реализацию Python на языке Си (CPython). Ценой высокой производительности и использования JIT-компиляции является более высокое потребление памяти - общее потребление памяти в сложных и длительно работающих процессах (например, при трансляции PyPy силами самого PyPy) превышает потребление CPython в полтора-два раза.В новом выпуске:
- Значительно увеличена (https://morepypy.blogspot.it/2017/10/cape-of-good-hope-for-p...) производительность и расширена функциональность прослойки cpyext для обеспечения совместимости с C-API. - Улучшена совместимость с CPython. - Обеспечена (https://morepypy.blogspot.com/2018/04/improving-syntaxerror-...) генерация более понятных сообщений в случае выявления синтаксических ошибок. - В сборщик мусора добавлена возможность подключения обработчиков для сбора информации о производительности.- Обеспечена совместимость с бэкендом TkAgg, применяемым по умолчанию в Matplotlib, что решило проблему с поддержкой пакетов pygame и pygobject. - Обновлены модули CFFI 1.11.5 (C Foreign Function Interface) и cppyy 0.6.0 с реализацией интерфейса для вызова функций, написанных на языках Си и C++.
Код для перевода внутреннего представления строк на utf8 не вошёл в релиз. На начальной стадии находится реализация поддержки Python 3.6.
URL: http://morepypy.blogspot.ru/2018/04/pypy27-and-pypy35-v60-du...
Новость: https://www.opennet.dev/opennews/art.shtml?num=48500
test = 0.7
while test <= 2.0:
print "%.1f" % (test)
test += 0.1Результат: выводит числа от 0.7 до 1.9
Почему не выводит 2.0?
Если поменять на 3.0, то тоже самое — последнее выводит 2.9.
Но если поставить начало цикла на 1.7, то 2.0 появляется.
Что магического в цифрах 2 и 3 для питона?
Для того, чтобы понять, почему так случается, вам нужно посмотреть это видео: https://youtu.be/WlaAAdz4pjM?t=84
Спасибо, интересно.
А в видео есть ответ на вопрос, как безопасно сравнивать 2 флоата?
if(abs(a-b) <= 0.00001) {...}
боже мой теперь понятно почему питон никому не нужен кроме извращенцев
О, смотрите все, вот code monkey считает себя умнее Дональда Кнута.
> боже мой теперь понятно почему питон никому не нужен кроме извращенцевВы не поверите, но …
% cat testfloat.c && gcc -Wall -Wextra -Wpedantic testfloat.c -o float && ./float
#include <stdio.h>int main(void)
{
double test = 0.7;
while (test <= 2.0) {
printf ("%.1f | %.20f\n", test, test);
test += 0.1;
}
return 0;
}
0.7 | 0.69999999999999995559
0.8 | 0.79999999999999993339
0.9 | 0.89999999999999991118
1.0 | 0.99999999999999988898
1.1 | 1.09999999999999986677
1.2 | 1.19999999999999995559
1.3 | 1.30000000000000004441
1.4 | 1.40000000000000013323
1.5 | 1.50000000000000022204
1.6 | 1.60000000000000031086
1.7 | 1.70000000000000039968
1.8 | 1.80000000000000048850
1.9 | 1.90000000000000057732
if str(f1)=str(f2):
pass
И в соседней процедуре сортировку пузырьком. Производительности то девать некуда.
Здесь не в питоне дело, а в том, как хранятся числа с плавающей точкой.
Ыгы. О сколько нам открытий чудных готовит IEEE 754.
Вообще, не хорошо сравнивать числа с плавающей точкой. Но вот while test <= 2.0 + sys.float_info.epsilon тоже не срабатывает, хотя должно бы.
> хотя должно быотчего бы это?
есть несколько аспектов:во-первых, epsilon - это такое минимальное положительное число, что 1.0 + epsilon != 1.0
т.е. совершенно законно, что 2.0 + epsilon == 2.0во-вторых, следовательно, оптимисты должны писать не 2.0 + epsilon, а 2.0*(1+epsilon)
в третьих, цепочка операций может накапливать погрешность неожиданным для неопытного человека образом. Конкретно в данном случае абсолютная погрешность суммы равна 2*epsilon, но при суммировании произвольной последовательности чисел довольно просто найти поучительные примеры -
>>> 1./3 + 2./3 - 1
0.0
>>> 1./3 -1 + 2./3-1.1102230246251565e-16
>>> 2./3 -1 + 1./3-5.551115123125783e-17
:)
Вообще-то интересно, как происходит приравнивание float-массивов в NumPy?
> Вообще, не хорошо сравнивать числа с плавающей точкой. Но вот while test
> <= 2.0 + sys.float_info.epsilon тоже не срабатывает, хотя должно бы.Ты на оборудовании с точностью 0.1 мм задаешь величину 2.15 мм.
Ну да, приходит наращивание за счёт постоянного прибавления одной десятой. 2.0000000000000004 > 2 + sys.float_info.epsilon. Лучше в циклах перевести в целые числа или в дроби:
from fractions import Fraction
test = Fraction(7, 10)
while test <= 2:
print "%.1f" % (test)
test += Fraction(1, 10)
Можно заменить на тип Decimal.
from decimal import Decimal
test = 0.7 # известно.
test = Decimal(str(test))
dt = Decimal('0.1')
while text <= 2:
print('{:.1f}'.format(test)
test += dt
) в конце print
Вот примерно поэтому надо хотя бы начинать с си плюсов или ещё чего, что даёт понимание того, как оно там внутри работает.
Для понимания как оно работает лучше начинать с ввода программы через инженерный пульт.
Очень просто и практично - набрал переключателями адрес, значение байта - нажал кнопку "записать",
и переходи к следующему байту. Когда введёшь программу и данные, набираешь адрес и кнопку "выполнить" :)А так-то и python ничего не скрывает. В частности, если мы говорим про числа с плавающей точкой -
>>> sys.float_info.epsilon.hex()'0x1.0000000000000p-52'
>>> (1.0+sys.float_info.epsilon).hex()
'0x1.0000000000001p+0'
>>> sum( [ 0.7 ] + [ 0.1 ]*13 ).hex()
'0x1.0000000000001p+1'
>>> float.fromhex('0x0.0000000000001p+0')
2.220446049250313e-16
А ещё у нас есть struct и ctypes :)
Скрывает. просто не наглухо. Разница в том, что на сях нельзя писать, не понимая основ, а на питоне - часто можно. И то, что на практике часто даёт удобство (а потом лупит граблями в неподходящий момент), в обучении замазывает пробелы в знаниях.
Не надо учить основы на питоне.... Питон - это язык для тех, кому не надо программировать вообще. То есть номинально надо что-то знать, потому что все вокруг программируют, но рельно - не нужно....Для понимания основ годится что-нибудь обычное высокоуровневое, например Паскаль. Проще, чем C, не перегружен, легко понять как работают алгоритмы. И ничего страшного, что реальные программы на нём уже почти не пишут. Книги Кнута - тоже, не на практически используемом языке написаны.
>Скрывает. просто не наглухо. Разница в том, что на сях нельзя писать, не понимая основ, а на питоне - часто можно.Вот казалось бы так. Но сишники раз за разом умудряются доказывать обратное!
Гоните таких сишников учить теорию
Некроверсия питона у кого-то потому-что.
Потому что 0.1 это в действительности 0.10000000000000001000
И после того как напечатано 1,9 и прибавляется 0.10000000000000001000 - получается сумма больше чем 2.0
Интересная штука, но matplotlib, видимо, пока все-таки не поддерживается.
Ну, подождем-с.
> Интересная штука, но matplotlib, видимо, пока все-таки не поддерживается.Вроде что-то шевелится...
tar xjvf pypy3-v6.0.0-linux64.tar.bz2
mkdir venv
pypy3-v6.0.0-linux64/bin/pypy3 -m venv --clear venv/dev-pypy3
pypy3-v6.0.0-linux64/bin/pypy3 -m venv --system-site-packages venv/dev-pypy3
. ~/venv/dev-pypy3/bin/activate
pip install --pre diofant[plot,interactive,develop,docs]matplotlib устанавливается корректно, правда долго - колес не завели.
И что-то строит:
$ python
Python 3.5.3 (fdd60ed87e94, Apr 24 2018, 06:10:04)
[PyPy 6.0.0 with GCC 6.2.0 20160901] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>> from diofant import plot, sin
>>>> from diofant.abc import x
>>>> plot(sin(x), (x, 0, 3))[...]
Plot object containing:
[0]: cartesian line: sin(x) for x over (0.0, 3.0)
Когда он уже сможет заменить cpython?
Телепатический модуль так и не завели.
А не хотят они PyPyPy написать на PyPy ) В соседней новости нейросеть уже пишет код. Вот и тут надо.
Ай-яй-яй, г-да модераторы. Ведь совсем не по теме новости что в Российской Федерации релиз PyPy можно скачать только через прокси?Что-ж вы публикуете новость о выходе противозаконного ПО?
я не модератор, но могу сказать -1) В PyPy ничего противозаконного нет.
2) У меня в СПб всё качается. Без всяких прокси, хочешь firefox-ом - хочешь wget-ом,
3) Если у Вас есть проблема, и Вы хотите её решить, то клоунада на opennet-е не поможет.Что поможет в решении проблемы мне не ведомо.
Вероятно, ваш провайдер смотрит на мир оловянными глазами...
>> 2) У меня в СПб всё качается. Без всяких прокси, хочешь firefox-ом - хочешь wget-ом,На самом деле, могу подтвердить, что и в моём случае amazonaws.com не отвечает (bbuseruploads.s3.amazonaws.com, именно туда идёт перенаправление при скачивании). Этот домен проверен уже двумя провайдерами. Но в списке заблокированных через host-tracker.com не определяется. Длится это с момент блокировки Телеграм
И вряд ли он вообще каким-либо образом сможет повлиять на решение проблемы.
Поправка, поддомены Амазона заблокированы, а значит, если IP совпадут с другими поддоменами, то тоже, вероятно, окажутся заблокированными. Увы:
https://www.host-tracker.com/InstantCheck/3/8749f05b-204b-e8...Это многое объясняет.
Ну что-ж, ответ опять удалили.Интересно, за что?
> Ну что-ж, ответ опять удалили.
> Интересно, за что?https://www.opennet.dev/cgi-bin/openforum/vsluhboard.cgi?az=l...
> УДАЛЕНО.WARNBOT, Реакция: bot info, Санкционировано: mc, Пояснение: оскорбление, Время: Sun Apr 29 19:07:57 2018Индикатор нарушения: "модер я не модератор, но могу сказать - "
Таки за что? "Оскорбиться" можно на что угодно, при желании.
> Таки за что? "Оскорбиться" можно на что угодно, при желании."дурачок"
Ваш КО.
И почему это оскорбительно? "Клоунада на opennete" почему-то г-ну модератору не показалась оскорблением.Кто первым оскорбился - тот и прав?
А что, pypy популярнее cython? В Debian всё ещё cython 0.26.1 от 29 августа 2017. А pypy только вышел, и на следующий день уже был в Debian.
В Debian как не было pypy3, так и нет.
В пакете cython идут оба. А в pypy, точно, только 2-ой.