|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Rodion Gorkovenko 2:5030/1286.6 14 May 2003 17:20:00 To : Alexandr Zhizhin Subject : RSA -------------------------------------------------------------------------------- 10 May 03 17:48, you wrote to me: AZ>>> Вообще было бы неплохо иметь в Си целочисленный тип на 80 бит. RG>> А вообще проблема-то невелика - встроенным ассемблером RG>> загрузить-выгрузить число в сопроцессор... Хотя все операции RG>> переписывать придется... AZ> Ээ это же ещё с этим ассемблером разбиратся придется %) Лит-ру по AZ> сопроцессору читать. Там список команд на страничку... А нужных тебе - вообще пяток... Возможно, дело того стоит... А может и не стоит... AZ>>> Операция взятия остатка для чисел с плавающей запятой - AZ>>> fmod(double,double) или что то типа того. RG>> Это да, но для такой точности она ничего путевого не скажет, RG>> подозреваю... Вот сейчас поэксперементировал с взятием остатка от RG>> деления 1.24Е+3000 на 1.23Е+3000 - получилось нецелое число... AZ> Остаток нецелое число - гон или глюк. Да нет - просто он их переводит в двоичные с точкой - и преобразование получается неточным... Hапример, если у нас всего два знака после точки, число 0.7 представить не получится - придется выбирать между 0.1 (0.5) и 0.11 (0.75)... Там ты дальше кому-то что-то отвечаешь по поводу использования нецелых чисел - в общем, хотя в long double и больше значащих чисел, это означает только то, что число такого типа можно вывести в десятичном представлении со столькими верными знаками - но если у тебя есть целое число со столькими десятичными знаками - не факт, что его можно точно представить в виде long double... Конкретно можно представить точно лишь числа, которые могут быть выражены как cумма чисел типа 1/2, 1/4,..., 1/(2^N), где N - целое число... То есть, скажем, 0.1011 (в двоичной) - это 1/2 + 0/4 + 1/8 + 1/16... Разумеется, не все десятичные числа можно так записать точно, поэтому числа с плавающей запятой не могут в принципе быть использованы для решения данной задачи (правда вопрос еще в том, сколько знаков ты берешь - порядка 17-18 еще, наверное, можно использовать... Больше 20 нельзя наверняка... Вот целочисленный 64-битный тип сопроцессора - это то, что надо... Я так понимаю, он дает как раз эти самые... 64*lg(2)=19.26... десятичных знаков. Зато точных... AZ> Кстати, а как насчет быстродействия? Эти операции медленее AZ> выполняются, чем целочисленные? Hа машине без сопроцессора - значительно медленнее - но, поскольку начиная где-то с 486 сопроцессор встроенный, то даже быстрее получается... Кажется... У меня на четверке быстрее - сейчас попробовал... Вообще и целые числа можно сопроцессором складывать... AZ> Согласен. Позор мне :) Hу не программер я всё таки. :) Брось... А кто тут программер - многие, наверное, сочтут себя математиками - а я вообще сбоку припека... ;) AZ> Пойду читать Кнута и Теорию чисел. Кнут пишет о вещах этаких, на мой взгляд, не очень сложных, но очень обстоятельно, хорошо пишет - чрезвычайно дисциплинирует ум... Hаверное... В книжном магазине я его полистал - но каждый том стоил под двести рублей и я ушел восвояси... А в электронном виде не видал - если найдется, я бы тоже почитал... AZ> Да кстати спасибо, выручил, твоя функция была использована и весьма AZ> ускорила работу проги. Вот это действительно чудеса... А как решили таки со взятием остатков - или так и делали в нецелых числах? с почтеньем, Rodion --- * Origin: (2:5030/1286.6) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/39753ec27e20.html, оценка из 5, голосов 10
|