2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Умножение чисел с плавающей запятой с…
Сообщение30.09.2013, 19:23 


25/07/12
13
…использованием только целочисленной арифметики.
Собственно, сабж. Посоветуйте что почитать.

 Профиль  
                  
 
 Re: Умножение чисел с плавающей запятой с…
Сообщение30.09.2013, 21:26 
Заслуженный участник
Аватара пользователя


19/12/10
1546
Ну, например, можно почитать здесь:
Д.Кнут "Искусство программирования" том 2 глава 4.3 Арифметика многократной точности.

 Профиль  
                  
 
 Re: Умножение чисел с плавающей запятой с…
Сообщение30.09.2013, 22:28 
Аватара пользователя


27/01/09
814
Уфа
Арифметика плавающей точки в общем-то увеличивает диапазон (масштаб) использования чисел за счёт уменьшения абсолютной точности и сохраняет постоянной относительную точность (если не учитывать трату разрядов на явное указание порядка чисел). Смотреть надо именно арифметику с плавающей точкой, арифметика многократной точности это повышение точности представления чисел за счёт увеличения их разрядности, например если понадобится увеличивать разрядность мантиссы за пределы разрядности целочисленного блока.

 Профиль  
                  
 
 Re: Умножение чисел с плавающей запятой с…
Сообщение30.09.2013, 22:38 
Заслуженный участник
Аватара пользователя


19/12/10
1546
Chifu
Как я понял, ТС интересуется вопросом моделирования арифметики плавающей точки при помощи целочисленной. На ум приходит школьное умножение в столбик. У Кнута это описано в той главе которую я указал.

 Профиль  
                  
 
 Re: Умножение чисел с плавающей запятой с…
Сообщение30.09.2013, 23:05 
Аватара пользователя


27/01/09
814
Уфа
Арифметика с плавающей точкой это когда числа представлены в виде мантиссы и порядка. Когда мантисса (она обычно значительно длиннее чем порядок) укладывается в слово процессора, то в столбик умножать не надо. И надо учитывать, что на мантиссу отводится фиксированное число разрядов (как в калькуляторе), поэтому если результат умножения не помещается в неё, то младшие значащие разряды не показываются (и изменяется порядок числа).

 Профиль  
                  
 
 Re: Умножение чисел с плавающей запятой с…
Сообщение30.09.2013, 23:11 
Заслуженный участник
Аватара пользователя


19/12/10
1546
Chifu
Пожалуй Вы правы, все манипуляции с мантиссой и порядком тоже ведь будут целочисленными.
(глава 4.2 у Кнута)

 Профиль  
                  
 
 Re: Умножение чисел с плавающей запятой с…
Сообщение02.10.2013, 19:00 


24/05/09

2054
А в чём проблема то? Если 1.23456789 умножить на 9.87654321, то цифры будут точно те же, что и 123456789 умножить на 987654321. Длинная арифметика давно придумана. Только точку в нужное место вставить, и никакой потери точности.

 Профиль  
                  
 
 Re: Умножение чисел с плавающей запятой с…
Сообщение03.10.2013, 09:31 
Аватара пользователя


27/01/09
814
Уфа
Чья проблема? Если не на бумаге и в уме или программно, то это аппаратная проблема. Тогда и появится точность абсолютная и относительная, и надо будет принять решение какая точность нужна.

 Профиль  
                  
 
 Re: Умножение чисел с плавающей запятой с…
Сообщение03.10.2013, 15:20 


24/05/09

2054
Я имел ввиду, что арифметика с плавающей запятой ненамного сложнее целочисленной.

 Профиль  
                  
 
 Re: Умножение чисел с плавающей запятой с…
Сообщение03.10.2013, 19:29 
Заслуженный участник


15/05/05
3445
USA
Alexu007 в сообщении #770064 писал(а):
Длинная арифметика давно придумана.
Придумана то она давно, но работает гораздо медленнее, чем встроеная в CPU/GPU.
А "BNPU" (Big Numbers Processing Unit) пока не выпускаются.

 Профиль  
                  
 
 Re: Умножение чисел с плавающей запятой с…
Сообщение03.10.2013, 21:41 


24/05/09

2054
Медленно, зато точно: http://cppalgo.blogspot.ru/2010/05/blog-post.html Вообще то конечно реализация зависит от требуемой точности. Но как вариант - почему нет? Запятую прикрутить только - и получится арифметика с плавающей запятой, использующая только целочисленную арифметику.

Изображение

И вообще, имеют ли смысл числа с плавающей запятой, если изменением масштаба (например умножением на единицу со ста нулями) они превращаются в целые? Только для удобства использования человеком?

 Профиль  
                  
 
 Re: Умножение чисел с плавающей запятой с…
Сообщение03.10.2013, 22:59 
Заслуженный участник


09/09/10
3729
Ну и нафиг? Начиная с Windows XP, встроенный калькулятор использует arbitrary-precision arithmetics.

 Профиль  
                  
 
 Re: Умножение чисел с плавающей запятой с…
Сообщение03.10.2013, 23:08 
Заслуженный участник


28/04/09
1933
Joker_vD в сообщении #770422 писал(а):
Начиная с Windows XP, встроенный калькулятор использует arbitrary-precision arithmetics.
Во-первых, не все используют Windows. :-) Во-вторых, этот калькулятор явно не та программа, которую в данном случае стоит приводить в пример.

 Профиль  
                  
 
 Re: Умножение чисел с плавающей запятой с…
Сообщение04.10.2013, 08:23 


24/05/09

2054
Дело не в калькуляторе, а в алгоритмах длинной арифметики, ссылку на которую я дал. Это же почти готовое решение для автора темы. Там в структуре хранится массив цифр длинного числа, и в отдельной переменной количество цифр. Нужно добавить ещё одну переменную, в которой будет храниться положение точки в числе.

Второй способ - отказаться от плавающей точки вообще, и преобразовывать числа в целые умножением на 10 в степени Х. В данной реализации для этого достаточно изменить переменную с количеством цифр. И в конце вычисления с помощью Х вычислить положение запятой в результате - поделить.

Калькулятор демонстрирует, что всё это работает.

 Профиль  
                  
 
 Re: Умножение чисел с плавающей запятой с…
Сообщение04.10.2013, 21:55 
Заслуженный участник


09/09/10
3729

(Оффтоп)

EtCetera
А теперь попробуйте вычислить $1/3$, умножить результат на $3$ и отнять единицу. Получится ровно ноль, а не $\varepsilon\cdot10^{-39}$

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group