1.1, Аноним (-), 00:14, 27/04/2018 [ответить] [﹢﹢﹢] [ · · · ]
| –1 +/– |
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 для питона?
| |
|
|
3.14, Аноним (-), 07:51, 27/04/2018 [^] [^^] [^^^] [ответить]
| +/– |
А в видео есть ответ на вопрос, как безопасно сравнивать 2 флоата?
| |
|
|
|
6.34, Аноним (-), 00:59, 28/04/2018 [^] [^^] [^^^] [ответить]
| –2 +/– |
О, смотрите все, вот code monkey считает себя умнее Дональда Кнута.
| |
6.35, Аноним84701 (ok), 01:06, 28/04/2018 [^] [^^] [^^^] [ответить]
| +/– |
> боже мой теперь понятно почему питон никому не нужен кроме извращенцев
Вы не поверите, но …
[CODE]
% 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
[CODE]
| |
|
|
|
5.42, ram_scan (?), 19:05, 28/04/2018 [^] [^^] [^^^] [ответить]
| +2 +/– |
И в соседней процедуре сортировку пузырьком. Производительности то девать некуда.
| |
|
|
|
2.4, alexpat (?), 00:37, 27/04/2018 [^] [^^] [^^^] [ответить]
| +2 +/– |
Здесь не в питоне дело, а в том, как хранятся числа с плавающей точкой.
| |
2.5, Анончик999999 (?), 00:40, 27/04/2018 [^] [^^] [^^^] [ответить]
| +/– |
Вообще, не хорошо сравнивать числа с плавающей точкой. Но вот while test <= 2.0 + sys.float_info.epsilon тоже не срабатывает, хотя должно бы.
| |
|
3.8, какойто другой аноним (?), 01:39, 27/04/2018 [^] [^^] [^^^] [ответить]
| +3 +/– |
> хотя должно бы
отчего бы это?
есть несколько аспектов:
во-первых, 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
:)
| |
|
4.9, Анонимчик (?), 02:51, 27/04/2018 [^] [^^] [^^^] [ответить]
| +/– |
Вообще-то интересно, как происходит приравнивание float-массивов в NumPy?
| |
|
3.26, Аноним (-), 15:43, 27/04/2018 [^] [^^] [^^^] [ответить]
| +/– |
> Вообще, не хорошо сравнивать числа с плавающей точкой. Но вот while test
> <= 2.0 + sys.float_info.epsilon тоже не срабатывает, хотя должно бы.
Ты на оборудовании с точностью 0.1 мм задаешь величину 2.15 мм.
| |
|
2.7, Анончик999999 (?), 00:59, 27/04/2018 [^] [^^] [^^^] [ответить]
| +3 +/– |
Ну да, приходит наращивание за счёт постоянного прибавления одной десятой. 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)
| |
|
3.10, Анонимчик (?), 02:57, 27/04/2018 [^] [^^] [^^^] [ответить]
| +/– |
Можно заменить на тип 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
| |
|
2.17, Crazy Alex (ok), 10:02, 27/04/2018 [^] [^^] [^^^] [ответить]
| +/– |
Вот примерно поэтому надо хотя бы начинать с си плюсов или ещё чего, что даёт понимание того, как оно там внутри работает.
| |
|
3.19, userd (ok), 12:39, 27/04/2018 [^] [^^] [^^^] [ответить]
| +1 +/– |
Для понимания как оно работает лучше начинать с ввода программы через инженерный пульт.
Очень просто и практично - набрал переключателями адрес, значение байта - нажал кнопку "записать",
и переходи к следующему байту. Когда введёшь программу и данные, набираешь адрес и кнопку "выполнить" :)
А так-то и 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 :)
| |
|
4.24, Crazy Alex (ok), 13:43, 27/04/2018 [^] [^^] [^^^] [ответить]
| +/– |
Скрывает. просто не наглухо. Разница в том, что на сях нельзя писать, не понимая основ, а на питоне - часто можно. И то, что на практике часто даёт удобство (а потом лупит граблями в неподходящий момент), в обучении замазывает пробелы в знаниях.
| |
|
5.36, Аноним (-), 08:33, 28/04/2018 [^] [^^] [^^^] [ответить]
| +/– |
Не надо учить основы на питоне.... Питон - это язык для тех, кому не надо программировать вообще. То есть номинально надо что-то знать, потому что все вокруг программируют, но рельно - не нужно....
Для понимания основ годится что-нибудь обычное высокоуровневое, например Паскаль. Проще, чем C, не перегружен, легко понять как работают алгоритмы. И ничего страшного, что реальные программы на нём уже почти не пишут. Книги Кнута - тоже, не на практически используемом языке написаны.
| |
5.39, num (?), 14:56, 28/04/2018 [^] [^^] [^^^] [ответить]
| +/– |
>Скрывает. просто не наглухо. Разница в том, что на сях нельзя писать, не понимая основ, а на питоне - часто можно.
Вот казалось бы так. Но сишники раз за разом умудряются доказывать обратное!
| |
|
|
|
2.44, ыы (?), 22:26, 28/04/2018 [^] [^^] [^^^] [ответить]
| +/– |
Потому что 0.1 это в действительности 0.10000000000000001000
И после того как напечатано 1,9 и прибавляется 0.10000000000000001000 - получается сумма больше чем 2.0
| |
|
1.2, corvuscor (ok), 00:22, 27/04/2018 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Интересная штука, но matplotlib, видимо, пока все-таки не поддерживается.
Ну, подождем-с.
| |
|
2.21, myhand (ok), 13:13, 27/04/2018 [^] [^^] [^^^] [ответить]
| +/– |
> Интересная штука, но 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)
| |
|
1.31, Диносуслик (?), 19:12, 27/04/2018 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
А не хотят они PyPyPy написать на PyPy ) В соседней новости нейросеть уже пишет код. Вот и тут надо.
| |
1.38, myhand (ok), 12:34, 28/04/2018 [ответить] [﹢﹢﹢] [ · · · ]
| –1 +/– |
Ай-яй-яй, г-да модераторы. Ведь совсем не по теме новости что в Российской Федерации релиз PyPy можно скачать только через прокси?
Что-ж вы публикуете новость о выходе противозаконного ПО?
| |
|
2.41, userd (ok), 18:14, 28/04/2018 [^] [^^] [^^^] [ответить]
| +/– |
я не модератор, но могу сказать -
1) В PyPy ничего противозаконного нет.
2) У меня в СПб всё качается. Без всяких прокси, хочешь firefox-ом - хочешь wget-ом,
3) Если у Вас есть проблема, и Вы хотите её решить, то клоунада на opennet-е не поможет.
Что поможет в решении проблемы мне не ведомо.
Вероятно, ваш провайдер смотрит на мир оловянными глазами...
| |
|
3.45, Аноним (-), 23:05, 28/04/2018 [^] [^^] [^^^] [ответить]
| +/– |
>> 2) У меня в СПб всё качается. Без всяких прокси, хочешь firefox-ом - хочешь wget-ом,
На самом деле, могу подтвердить, что и в моём случае amazonaws.com не отвечает (bbuseruploads.s3.amazonaws.com, именно туда идёт перенаправление при скачивании). Этот домен проверен уже двумя провайдерами. Но в списке заблокированных через host-tracker.com не определяется. Длится это с момент блокировки Телеграм
И вряд ли он вообще каким-либо образом сможет повлиять на решение проблемы.
| |
|
4.52, Аноним (-), 18:20, 29/04/2018 [^] [^^] [^^^] [ответить]
| +/– |
> Ну что-ж, ответ опять удалили.
> Интересно, за что?
https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi?az=list&forum=vsluhfor
> УДАЛЕНО.WARNBOT, Реакция: bot info, Санкционировано: mc, Пояснение: оскорбление, Время: Sun Apr 29 19:07:57 2018
Индикатор нарушения: "модер я не модератор, но могу сказать - "
| |
|
|
6.54, Аноним (-), 19:23, 29/04/2018 [^] [^^] [^^^] [ответить]
| +/– |
> Таки за что? "Оскорбиться" можно на что угодно, при желании.
"дурачок"
Ваш КО.
| |
|
7.55, myhand (ok), 19:34, 29/04/2018 [^] [^^] [^^^] [ответить]
| +/– |
И почему это оскорбительно? "Клоунада на opennete" почему-то г-ну модератору не показалась оскорблением.
Кто первым оскорбился - тот и прав?
| |
|
|
|
|
|
|
1.43, Андрей (??), 20:20, 28/04/2018 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
А что, pypy популярнее cython? В Debian всё ещё cython 0.26.1 от 29 августа 2017. А pypy только вышел, и на следующий день уже был в Debian.
| |
|