[ /b/ /u/ /rf/ /dt/ /vg/ /r/ /cr/ /lor/ /mu/ /oe/ /s/ /w/ /hr/ ] [ /a/ /ma/ /sw/ /hau/ /azu/ ] [ /tv/ /cp/ /gf/ /bo/ /di/ /vn/ /ve/ /wh/ /fur/ /to/ /bg/ /wn/ /slow/ /mad/ ] [ /d/ /news/ ] [ Главная | Настройки | Закладки | Плеер ]

Ответ в тред 46971. [Назад]
 [ Скрыть форму ]
Имя
Не поднимать тред 
Тема
Сообщение
Капча Капча
Пароль
Файл
Вернуться к
  • Публикация сообщения означает согласие с условиями предоставления сервиса
  • В сообщениях можно использовать разметку wakabamark
  • На данной доске отображаются исходные имена файлов!
  • Разрешенные типы файлов: pdf, code, flash, video, text, archive, image, vector, music
  • Тред перестает подниматься после 500 сообщений.
  • Треды с числом ответов более 100 не могут быть удалены.
  • Старые треды перемещаются в архив после 40 страницы.

No.46971 Ответ
Файл: preds.gif
Gif, 21.70 KB, 577×647 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
preds.gif
Здесь будет мой дневничок, посвященный написанию сабжа с помощью рациональных чисел из библиотеки GNU MP/MPIR.

Тем кто хочет ознакомиться с темой добро пожаловать сюда:
https://habrahabr.ru/post/138168/
Или на видео этого же чувака:
https://www.youtube.com/watch?v=ndimHVTnUMA

Т.к. у меня уже почти атрофировались все навыки написания программ, то попутно я буду вспоминать си.
>> No.46972 Ответ
Особый кайф этой библиотеки состоит в том, что я не смог найти даже примитивных туториалов для даунов или популярных книг для чайников. Придется читать чертову документацию страницу за страницей.
>> No.46973 Ответ
Сделал тестовый cmake-скрипт, все собралось, можно приступать к ковырянию БЛЯ ЩА НА ДЕЛО ПОЙДЕМ, ОТВЕЧАЮ ТАКИЕ ТЕМЫ МУТИТЬ БУДЕМ, УХ ЧТО СЕЙЧАС НАЧНЕТСЯ, ВНАТУРЕ ДВИЖУХА ЩА БУДЕТ
>> No.46974 Ответ
Первая работающая программа.

Как вы думаете сколько будет 0.23414*12.21736 в форме рационального числа?
Правильный ответ:
7252413325258057258250800212775/2535301200456458802993406410752

Офигительно.
>> No.46975 Ответ
Файл: d01.PNG
Png, 53.58 KB, 761×624
edit Find source with google Find source with iqdb
d01.PNG
Файл: d02.PNG
Png, 55.36 KB, 807×634
edit Find source with google Find source with iqdb
d02.PNG

>>46974
Немного неправильно написал. На самом деле это был не результат умножения этих чисел, а их конверсий в тип double. Если не конвертировать, то там другой результат был бы. Но у меня в программе входные данные будут в даблах -- так что это именно то что мне нужно.
>> No.46976 Ответ
>>46974
Чистые фракции будут 1787857919/625000000.

На этом закончу и отправлюсь спать.
>> No.46983 Ответ
Тем временем я реализовал этот предикат. По мере реализации стала очевидна потребность в написании более общего транслятора арифметических выражений из обычной формы в форму GMP-функций. Наверное, кто-то где-то уже это писал. Для SAGE или Mathematica. Может быть есть даже попен-сорс.
>> No.46984 Ответ
Файл: test.PNG
Png, 13.27 KB, 767×460 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
test.PNG
Тест на адекватность алгоритма пройден четенько.
>> No.46991 Ответ
Сейчас затестирую два старых алгоритма, которые у меня стояли до этого. И посмотрю на результаты. А потом попробую их объеденить, чтобы новый работал только в самом узком месте.
>> No.47005 Ответ
Не очень понял (если вообще что-то понял), как оно получает корректный результат из уже некорректных вводных флоатов, но вангую, что всё равно всё сделано через егоры с терпимостями.
>> No.47015 Ответ
>>47005
> как оно получает корректный результат из уже некорректных вводных флоатов
Верно подметил, что сами входные данные потенциально некорректны. И чем больше с ними совершено операций, пока они находятся внутри типа float -- тем более некорректны они становятся.

Однако, если не делать вышеописанных процедур, то количество мест в программе, где происходит какая-то дичь будет только множиться. Это устранение одной из головных болей.
>> No.47017 Ответ
>>47015
Вроде что-то понял. Инпуты некорректны, но вычисления над ними не будут наращивать эту некорректность, так? Минус, полагаю, в производительности.
>> No.47022 Ответ
Теперь это будет тред 754 стандарта. Настало время его наконец-то прочитать.

Видео для интересующихся:
https://www.youtube.com/watch?v=K5Y4-4SKaSA
>> No.47025 Ответ
Интересная статья по теме:
https://habrahabr.ru/post/258483/

Стандарт читается очень тяжело. Т.к. написан казенным языком. Нужно крепко помолиться, чтобы продвинуться на новую страницу.
>> No.47027 Ответ
Отличная статья:
http://smalltalk.gnu.org/blog/bonzinip/floating-point-decimal-conversion-not-so-easy

Наконец-то стало понятно почему программы по печати float'ов могут напечатать разное для одного и того же числа.
>> No.47035 Ответ
Файл: nextafter.PNG
Png, 25.96 KB, 716×224 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
nextafter.PNG
Посоны, посоветуйте свободную библиотеку, где есть аналог этого:
http://www.digitalmars.com/rtl/math.html#nextafter
https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.bpxbd00/rnextf.htm
http://en.cppreference.com/w/c/numeric/math/nextafter
https://opensource.apple.com/source/Libm/Libm-47/ppc.subproj/nextafter.c

Чтобы работало для binary32 float (одинарной точности) под intel. В той версии студии, что у меня есть (и изменить ее я не могу) этой функции нет. И писать самому мне ее очень не хочется.
>> No.47036 Ответ
Офигеть. В Apple пишут в новой версии libm пишут код сразу в ассемблере:
https://opensource.apple.com/source/Libm/Libm-2026/Source/Intel/nextafterf.s.auto.html
>> No.47037 Ответ
Файл: printf.PNG
Png, 42.34 KB, 749×728 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
printf.PNG
Блин. Походу у майкрософт сломанный printf в части печати float. Он слишком рано округляет, хотя его этого делать не просили. Еще с этим теперь разбираться.
>> No.47038 Ответ
Файл: 17.PNG
Png, 15.60 KB, 778×146 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
17.PNG
>>47037
Так и есть.
> The VC++ CRT, regrettably, refuses to print floats or doubles with more than 17 digits of mantissa. 17 digits is enough to uniquely identify any float or double, but it is not enough to tell us precisely what value they contain.
>> No.47049 Ответ
>>47035
В glibc есть
>> No.47058 Ответ
>>47038
> Так и есть.
> The VC++ CRT, regrettably, refuses to print floats or doubles with more than 17 digits of mantissa. 17 digits is enough to uniquely identify any float or double, but it is not enough to tell us precisely what value they contain.
не вполне так.
хотя это вопрос, в некотором смысле, философский.
вкратце, нет оснований думать, будто float or double "содержит" некоторое конкретное значение сверх того, которое его однозначно идентифицирует.


Пароль:

[ /b/ /u/ /rf/ /dt/ /vg/ /r/ /cr/ /lor/ /mu/ /oe/ /s/ /w/ /hr/ ] [ /a/ /ma/ /sw/ /hau/ /azu/ ] [ /tv/ /cp/ /gf/ /bo/ /di/ /vn/ /ve/ /wh/ /fur/ /to/ /bg/ /wn/ /slow/ /mad/ ] [ /d/ /news/ ] [ Главная | Настройки | Закладки | Плеер ]