|
2.5, Аноним (5), 13:19, 30/07/2019 [^] [^^] [^^^] [ответить]
| +/– |
Разработку интенсивных алгоритмов вычислительной математики лучше выполнять на С с тем, чтобы добиться 1) скорости, 2) кроссплатформенности. Для прочих языков достаточно иметь интерфейс. На что, собственно, и намекают в новости.
Во всяком случае, в нашей практике такой подход оказался успешным.
| |
|
3.6, Аноним (2), 13:25, 30/07/2019 [^] [^^] [^^^] [ответить]
| +/– |
C может и быстрый и кроссплатформенный, но есть сомнения по поводу математики в C, именно вопросы по поводу приведения типов и вещественных чисел
| |
|
4.10, Ivan_83 (ok), 14:37, 30/07/2019 [^] [^^] [^^^] [ответить]
| –1 +/– |
Так в си вам никто не запрещает реализовывать любую математику с любым приведением типов.
Я для себя реализовал работу с длинными числами чтобы реализовать элиптическую крипту и она даже работает.
| |
|
|
2.8, Аноним (-), 13:44, 30/07/2019 [^] [^^] [^^^] [ответить]
| –1 +/– |
А какой в этом смысл? Нужно писать математические программы - используйте правильные языки типа Julia. То, что делает numpy у неё в базовой библиотеке. Если нужно машинное обучение - https://github.com/alan-turing-institute/MLJ.jl
И, самое главное, большинство библиотек для Julia написано на Julia, как бы странно для питонистов это ни звучало.
| |
|
3.11, Ivan_83 (ok), 14:38, 30/07/2019 [^] [^^] [^^^] [ответить]
| +/– |
Всё написано на си (кроме того что написано на асме), нужно использовать только си, остальное лишние сущности :)
| |
|
4.16, Аноним (16), 15:04, 30/07/2019 [^] [^^] [^^^] [ответить]
| +/– |
> нужно использовать только си, остальное лишние сущности :)
Любой алгоритм можно выразить в терминах электронов, текущих по проводникам или полупроводникам процессора.... Зачем что-то большее?.....
А если серьёзно, то сущности должны быть ровно те, которые подходят данной предметной области. Любые другие сущности приводят к ошибкам, снижению скорости разработки и отладки. При всей незаменимости С в математике его используют лишь с горя, когда либо разрабы ничего больше не знают, либо надо писать нашлёпку к питону.
И не лезте с другими сущностями в чужой монастырь....
| |
|
5.19, Ivan_83 (ok), 16:47, 30/07/2019 [^] [^^] [^^^] [ответить]
| –1 +/– |
Как минимум затем что математика используется в криптографии, а криптография используется везде, в том числе и там где питон даже не запустится.
Если бы не синтаксис питона завязанные на количество пробелов я бы им скорее всего активно пользовался :)
| |
|
4.18, имя (?), 15:38, 30/07/2019 [^] [^^] [^^^] [ответить]
| +2 +/– |
Вот и выросло поколение, которое про фортран даже не слышало.
| |
|
5.20, Ivan_83 (ok), 16:49, 30/07/2019 [^] [^^] [^^^] [ответить]
| –1 +/– |
К сожалению слышало.
Насколько помню этот самый numpy его юзает через *BLAS прослойку, из за этого приходится собирать и таскать целый gcc.
| |
|
6.22, Аноним (5), 18:40, 30/07/2019 [^] [^^] [^^^] [ответить]
| +/– |
Не представляет никакой проблемы совместное использование Фортрана и С.
По секрету для обучающихся. Не представляет никакой проблемы математика на С и интерфейс пользлвателя, скажем, на Visual Basic for Application.
| |
|
7.36, Ivan_83 (ok), 15:27, 01/08/2019 [^] [^^] [^^^] [ответить]
| –1 +/– |
Плевать на фортран, мне он мешается только тем что ради него пол часа гцц компеляется.
| |
|
|
|
|
|
|
1.12, Аноним (12), 14:43, 30/07/2019 [ответить] [﹢﹢﹢] [ · · · ]
| –3 +/– |
Питономатики, подскажите пожалуйста как это полечить:
$ python3
Python 3.6.8 (default, Jan 14 2019, 11:02:34)
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 148.7-48.7
99.99999999999999
Как быстрофикс, я предлагаю переписать кусок программы на С, собрать *.so и вызвать через CDLL. Может есть какие-то биндинги, типа GMP, только живые и покрывающие все арифметические действия? Должен же быть менее костыльный способ...
| |
|
2.13, Andrey Mitrofanov_N0 (??), 14:47, 30/07/2019 [^] [^^] [^^^] [ответить]
| +1 +/– |
> Питономатики, подскажите пожалуйста как это полечить:
> $ python3
>>>> 148.7-48.7
> 99.99999999999999
> Как быстрофикс, я предлагаю переписать
Пс-сст, пацанчик, возьми немного NumPy, недорого !
| |
|
3.29, Аноним (12), 15:14, 31/07/2019 [^] [^^] [^^^] [ответить]
| –1 +/– |
>>> numpy.sum([148.7, -48.7])
99.999999999999986
>>> gmpy2.sub(148.7, 48.7)
mpfr('99.999999999999986')
>>> gmpy2.add(148.7, -48.7)
mpfr('99.999999999999986')
| |
|
2.14, Мама (?), 14:56, 30/07/2019 [^] [^^] [^^^] [ответить]
| +9 +/– |
Аноним открывает для себя волшебный мир арифметики с плавающей точкой.
| |
|
3.34, Иваныч (??), 02:51, 01/08/2019 [^] [^^] [^^^] [ответить]
| +/– |
Мне нравится когда числа с плавающей точкой используются в качестве примера ущербности JS. Не то чтобы там костылей не было, их даже сверх, но использовать числа с плавающей точкой как пример ущербности любого ЯП это уровень.
| |
|
2.15, n80 (?), 15:03, 30/07/2019 [^] [^^] [^^^] [ответить]
| +/– |
> Питономатики, подскажите пожалуйста как это полечить:
> $ python3
> Python 3.6.8 (default, Jan 14 2019, 11:02:34)
> [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
> Type "help", "copyright", "credits" or "license" for more information.
>>>> 148.7-48.7
> 99.99999999999999
Добро пожаловать в увлекательный мир чисел с плавающей точкой. Это нормальное поведение для float/double, в C то же самое, даже в железе так (в смысле, двоичные дроби под капотом, в которые не любые десятичные переводятся точно).
Если хочется работать именно с десятичными дробями вместо двоичных - есть модуль decimal в стандартной библиотеке.
А если просто вывод не нравится - есть функция round или указание ширины вывода (как в C!):
In [1]: a = 148.7
In [2]: b = 48.7
In [3]: a - b
Out[3]: 99.99999999999999
In [4]: round(a - b, 2)
Out[4]: 100.0
In [5]: round(a - b, 3)
Out[5]: 100.0
In [6]: '%.2f' % (a - b)
Out[6]: '100.00'
| |
|
|
4.33, n80 (?), 01:48, 01/08/2019 [^] [^^] [^^^] [ответить]
| +/– |
Только вот на вход в Decimal лучше строку подавать (кавычки добавить), а не float, а то будет двойное преобразование (сначала при разборе скрипта будет преобразование из десятичной записи в питоновский float, который соответствует сишному double, потом из этого float в структуру внутри объекта типа Decimal), потеря точности и боль-отчаяние. См.:
In [2]: import decimal
In [3]: decimal.Decimal(7500.42)
Out[3]: Decimal('7500.420000000000072759576141834259033203125')
In [4]: decimal.Decimal('7500.42')
Out[4]: Decimal('7500.42')
| |
|
|
2.17, Аноним84701 (ok), 15:15, 30/07/2019 [^] [^^] [^^^] [ответить]
| +1 +/– |
> Питономатики, подскажите пожалуйста как это полечить:
> $ python3
> Python 3.6.8 (default, Jan 14 2019, 11:02:34)
> [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
> Type "help", "copyright", "credits" or "license" for more information.
>>>> 148.7-48.7
> 99.99999999999999
Например прочитать https://docs.python.org/3/tutorial/floatingpoint.html
>>> format(148.7-48.7,'.2f')
'100.00'
>>> format(148.7-48.7,'.10f')
'100.0000000000'
>>> format(148.7-48.7,'.20f')
'99.99999999999998578915'
> Как быстрофикс, я предлагаю переписать кусок программы на С, собрать *.so
Вы не поверите, но:
% cat arith.c && gcc -Wall -Wextra -O2 -std=c99 arith.c && ./a.out
#include <stdio.h>
int main(void) {
double res = 148.7 - 48.7;
printf("\n%f, %.13f, %.14f", res, res, res);
return 0;
}
100.000000, 100.0000000000000, 99.99999999999999
Ну и раз сегодня такой день, то открою страшную тайну:
https://github.com/python/cpython/tree/master/Python
> Python 60.8% C 31.9%
>
Мне жаль :(
| |
2.21, аноним3 (?), 18:17, 30/07/2019 [^] [^^] [^^^] [ответить]
| –1 +/– |
Python 3.5.2 (default, Feb 23 2018, 06:12:47)
[GCC 5.4.1 20170404 ] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 147.8-47.8
100.00000000000001
и такое бывает)))
| |
2.23, Аноним (5), 18:43, 30/07/2019 [^] [^^] [^^^] [ответить]
| –1 +/– |
Про MACHEPS слышали? Так называют наименьшее число с десятичной точкой, которое способна различить конкретная машина. Рекомендуется вычислить его до любого полезного вычисления и далее использовать для проверки значимости.
| |
2.24, Ordu (ok), 22:07, 30/07/2019 [^] [^^] [^^^] [ответить]
| –1 +/– |
В математике 99.(9)==100. Ряд 9/10+9/10^2+9/10^3 сходится к 1. Это известный и неустранимый косяк позиционной системы счисления: некоторые числа имеют больше одного способа записи. В мире вычислений с ограниченной точностью, ситуация усугубляется ограниченной точностью.
| |
|
|
4.27, Andrey Mitrofanov_N0 (??), 09:10, 31/07/2019 [^] [^^] [^^^] [ответить]
| +/– |
>не 100 грамм, а 90 за ту же цену.
А вот это уже ZOG, рептилоиды, ротшильды и заговор. Как Вы не понимаете!7
>Математика! | |
|
3.26, Andrey Mitrofanov_N0 (??), 09:08, 31/07/2019 [^] [^^] [^^^] [ответить]
| +/– |
>Это известный и неустранимый
> косяк позиционной системы счисления: некоторые числа имеют больше одного способа записи.
Не-е-е, неустранимы дураки в интернетах, ...
...а это _тупо_ разница в точности представления _дробей_ конечными по длинне дробями с другим, не кратным, основанием.
При переводе "точной" десятичной записи в "двоичную" плавучку "в половине случаев"(ТМ) получается бесконечная дробь (а-ля 1.3 = 0.(3)) и...
та-да-а-а!!
...ошибка округления.
Вот, блин, развели детсад.
| |
|
4.28, Ordu (ok), 12:12, 31/07/2019 [^] [^^] [^^^] [ответить]
| +/– |
>>Это известный и неустранимый
>> косяк позиционной системы счисления: некоторые числа имеют больше одного способа записи.
> Не-е-е, неустранимы дураки в интернетах, ...
Совершенно верно.
| |
|
|
|
1.32, Аноним (32), 00:09, 01/08/2019 [ответить] [﹢﹢﹢] [ · · · ]
| +1 +/– |
SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.
* (- 148.7 48.7)
100.0
*
:-)
| |
|