Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Сегодня я как обычно тренировался, решал такую задачу : авторТребуется вычислить факториал целого числа N(max 1000). Написал такую программу(реализовал длинную арифметику для натуральных чисел): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. С первого раза система её приняла (правда до этого я тестировал функции самостоятельно). Потом посмотрел как это делается в сети. Алгоритмы примерно одинаковые, только с памятью немного по другому работают. Также, возможно, нет необходимости передавать длину строк в функции, если её можно вычислить с помощью функции size_t strlen(const char* ). Посмотрел раздел лучшие решения, и увидел на первом месте программу на C++ размером 165 символов. Я был удивлён, моя занимает в 10 раз больше, и даже с учётом оптимизаций, она будет в 5 раз больше. Первым делом я поискал библиотеки для работы с длинными числами(стандартные), но то ли плохо искал, то ли их и правда нет. Подскажите пожалуйста, в каком направлении нужно двигаться, чтобы понять как эту программу можно написать за 165 символов.(не прошу вас писать и тратить на это своё время) И ещё, можно не передавать количество символов в функции, или правильно передавать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 06:02 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury, стандарт де-факто для работы с большими числами - GMP. https://gmplib.org/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 07:37 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury , Сашок. Есть сообщество JavaScript кодеров. Они пилят шахматы в 5 килобайт. Это очень интересный мозго*б-трах. Повышает гибкость и олимпиадное мышление. К сожалению для промышленных задач он весьма и весьма бесполезен. Ну какое ты преимущество получишь если будет 165 символов ? Засилье defines и полную нечитабельность. Если реально ищешь краткости и концентрации мысли то иди в Haskell. Там такие задачки кодят в три строки что у меня стучит челюсть об клавишу пробел. Ну вобщем с пятницей тебя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 12:32 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Тут ещё дело в подходах. Некоторые хранят числа как с фиксированной точкой. но не char-encoded, и не BCD (кстати, в некоторых машинах есть прямая поддержка BCD на уровне машинных комманд), а в виде числа, хранящегося в системе счисления по основанию 256 (по, надеюсь, понятной причине). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 13:13 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
mayton, спасибо, и вас с пятницей C: не ищу краткости, мне нравятся стройность, красота, оптимальность кода. MasterZiv, тогда в одном символе я могу хранить 256 значений. Значит в 8 символах, например, будет 256^8 значений. Или причина другая ? По времени та программа не выигрывает кстати, но по памяти она лучше, я думаю это связано с тем что я несколько раз в функция делаю сдвиг символов, и realloc. И возможно делаю это не грамотно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 14:53 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
MasterZivа в виде числа, хранящегося в системе счисления по основанию 256 (по, надеюсь, понятной причине). ну тогда уж основание 2 32 или 2 64 по той же причине ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 15:07 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercurymayton, спасибо, и вас с пятницей C: не ищу краткости, мне нравятся стройность, красота, оптимальность кода. Вот сейчас ты сказал несколько противоречивых на мой взгляд тезисов. Или требующих дополнения. Обрати внимание также на формулу Стирлинга. https://ru.wikipedia.org/wiki/Факториал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 15:32 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonSashaMercurymayton, спасибо, и вас с пятницей C: не ищу краткости, мне нравятся стройность, красота, оптимальность кода. Вот сейчас ты сказал несколько противоречивых на мой взгляд тезисов. Или требующих дополнения. Обрати внимание также на формулу Стирлинга. Мне нравится оптимальное сочетание этих вещей, ну и вообще - всё в меру. Слишком слабо знаю язык Си, и теорию языков программирования, чтобы серьёзно об этом рассуждать. Но думаю в дальнейшем я смогу сделать обоснованные выводы на эту тему. Мне кажется к этим выводам я приду совершенно случайно, может быть перед сном, или в автобусе. Это как понимание актуальности классов, я знал что они есть, и даже использовал их в C#, но не понимал почему без них нельзя. Но когда писал методы для работы с матрицами на С, у меня возникло желание объединить методы и характеристики объектов. Теперь я понимаю, что без них скорее всего можно обойтись, но для грамотной декомпозиции, классы могут быть актуальны. Спасибо, о формуле Стирлинга я подумал в первую очередь, но в любом случае, придётся использовать длинную арифметику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 15:56 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Сегодня вновь пришлось с ней обратиться, и я решил "погуглить", как мне советовал Anatoly Moskovsky. Наткнулся на работу одного товарища, вот этого [quote ссылка ] Hi. I'm a former grad student of the Department of Computer Sciences at The University of Texas at Austin. I received my Ph.D. in Computer Sciences on May 18, 2002. I'm now an assistant professor in the Department of Computer Science at Rutgers University. [/quote] Университет тоже вроде приличный . Вот сама работа Настроение от прочтения данной работы у меня испортилось, потому что мне практически ничего не понравилось. Начало всё с обычных вещей: авторSome compilers, such as GCC, offer a "long long" type, giving 64 bits capable of representing about 9 quintillion (9 times 1018) 1. Какие компиляторы ? При чём тут это ? Есть стандарт, там написано чёрным по белому о том что существует тип данных long long int. Он должен был написать про стандарт, и про то что некоторые компиляторы могут поддерживать такой тип данных. 2. Он должен был написать про то что существуют extendet integer types, fe __int128 Далее, авторIn our new representation, we have an array of "digits" (integers) in some base b. Typically, b = 10, our normal decimal number system; that makes things easy to print. The 0'th array element is the 1's place, the #1 element is the ten's place, the #2 element is the hundred's place, and so forth (really, the b0's place, the b1 place, the b2 place, etc.) 3. Где хоть слово про последний элемент ??? Я очень хотел встретить терминальный нуль //далее в комментариях я встретил и самое главное 4. Где обоснование что числа в длинной арифметике нужно хранить реверсом (хотя вот тут я его не виню, может быть это очевидно для людей со степенью PhD(тут без иронии говорю)) 5. Он вводит в работе BASE. Но ничего не говорит о том, каков лимит символов для одного long integer 6. Мне так и не понятно как грамотно работать с памятью, выделять сразу максимум(если его надо вводить-скорее всего надо), например 1000 символов, и потом уменьшать размере выделенной памяти, либо выделять память в два этапа, минимальный размер, +1 если будет переполнение. Или выделять 500 символов сразу, а потом довыделять. 7. Ни одна из его функций ничего не возвращает, мне это не нравится. Верны ли мои комментарии ? Дайте пожалуйста ответы на вопросы которые есть в них. Или дайте ссылку где все эти вопросы решены(Чувствую что есть в Кнуте, но у меня первый том, и я пока этого там не встретил). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 09:25 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury6. Мне так и не понятно как грамотно работать с памятью, выделять сразу максимум(если его надо вводить-скорее всего надо), например 1000 символов, и потом уменьшать размере выделенной памяти, либо выделять память в два этапа, минимальный размер, +1 если будет переполнение. Или выделять 500 символов сразу, а потом довыделять. На самом деле при твоей постановке "сферической длинной арифметике в вакууме" нет ответа на вопрос - сколько выделять сразу и потом. Эти параметры - экспертные и подбираются исходя из гистограммы разрядности чисел которые ты будешь вычислять. А рязрядность будет обычно ограниченная. К примеру если это финансовая арифметика или работа с ключами криптографии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 10:30 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Сейчас зайду, разбежался. Удалите этот бред. mayton, мне интересна классическая постановка и классическое решение. Я уже эту задачу решил но мне нужно знать как это делать оптимально, и правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 14:16 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Верны ли замечания по лекции PhD ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 14:21 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСейчас зайду, разбежался. Удалите этот бред. mayton, мне интересна классическая постановка и классическое решение. Я уже эту задачу решил но мне нужно знать как это делать оптимально, и правильно. 1) Тогда используй "классический" подход. Выделяй ровно столько сколько надо через malloc. Перевыделяй через realloc. 2) Что нужно удалять?. И зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 15:05 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Нет, насчёт удалять я не прав, это не нужно. То есть делать функции для строк любой мощности ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 15:20 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНет, насчёт удалять я не прав, это не нужно. То есть делать функции для строк любой мощности ? Я вот щас хватаюсь за голову и вспоминаю что такое мощность . Я знаю мощность из физики. Как работа на время. Я знаю мощность множеств из курса дискретной математики. Есть экономические мощности e.t.c. Но что такое мощность строк ? Может прояснишь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 15:26 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Имею ввиду мощность множества из дискретной математики, ведь строка это массив символов(или аналог - множество). Потому количество символов в строке называю мощностью :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 15:29 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Мультимножество наверное хотел сказать. Ну вобщем не прикалывайся. Запутал только. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 15:35 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
ахах, не буду прикалываться :D меня гонят.До свидание всем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 15:53 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonМультимножество наверное хотел сказать. Может просто "длина"? Раз о строках речь. PS SashaMercury будь проще и люди к тебе потянутся (с), а то как в анекдоте: - Не подскажете как найти площадь Ленина? - Элементарно, умножьте высоту Ленина на ширину :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 16:05 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Весёлый анекдот C: Дело в том, что слово мощность, подразумевает множество элементов, потому когда я говорю "мощность строки", то я подчёркиваю что имею дело с массивом символов, а не с неким элементов строки. Слово длина больше ассоциируется с ростом, длиной чего-нибудь в сантиметрах. Кстати, мощность равная нулю, это указатель, на который не выделенна память. Бесконечная мощность, я думаю тоже существует, в каких-нибудь алгоритмах, чувствую, появляется абстрактная бесконечная строка. Впрочем я гуглил, и не нашёл что-бы кто-нибудь из приличных учёных так говорил. Хотя, возможно мало искал, и в дальнейшем встречу у Хоара, или кого-нибудь ещё. В любом случае, пока я не получил чёткого "Почему правильней говорить длина строки, чем более естественная и очевидная фраза мощность строки". Еще, возможно у каждого программиста есть свой стиль, именования переменных, комментариев (тут конечно smald отличился :D), и т.п. Пока я именую так, хотя и учитываю мнение некоторых представителей Сообщества. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 14:36 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВпрочем я гуглил, и не нашёл что-бы кто-нибудь из приличных учёных так говорил. Плохо гуглил, хэлпа достаточно http://www.cplusplus.com/reference/cstring/strlen/ strlen size_t strlen ( const char * str ); Get string length Returns the length of the C string str. length однозначно переводится как "длина". Поэтому и привыкли все что у строк длина. PS Еще вес в метрах бывает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 14:56 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Снова я плохо объяснил ( Не нашёл чтобы кто-то говорил pow и мощность. Длину я много раз встречал ) Практически везде. Но вес в метрах не слышал. Сейчас узнаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 14:58 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Сашок, ты в курсе что означает буква в GMP? Её не глупые люди пишут, можешь глянуть раз так интересно. автор. В любом случае, пока я не получил чёткого "Почему правильней говорить длина строки, чем более естественная и очевидная фраза мощность строки". Бросай курить. Мощность строк это ни разу не естественно. И не очевидно. авторPS Еще вес в метрах бывает PS. Ещё сила бывает в своих собственных килограммах . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:22 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
А дисперсия массы измеряется в килограммах квадратных. А чём мы вообще тут говорим? Саш. Культура обещения начинается с терминологии. Используй правильные термины и будешь понят. А если ты поэт и писатель и вообще тебе нравится придумывать новые слова - то ты ошибся форумом. Народ не поймет и будешь бит сообщестом. Зачем это тебе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:49 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Я понял, что всем привыкли к слову длина-length Но кроме того, что так сложилось исторически, я не понимаю почему так. Плюс к тому что я писал ранее, длина может делиться постоянно, тут же у нас неделимые символы. Я могу сказать "половина сантиметра", но не могу сказать "половина символа". Привел несколько доводов в пользу слова мощность. StrangecatБросай курить. Мощность строк это ни разу не естественно. И не очевидно. Думаю что для любого изучающего в школе математику естественна связь, хоть может быть, не очевидно что именно так нужно называть. maytonСаш. Культура обещения начинается с терминологии. Используй правильные термины и будешь понят. А если ты поэт и писатель и вообще тебе нравится придумывать новые слова - то ты ошибся форумом. Народ не поймет и будешь бит сообщестом. Зачем это тебе? Просто хочу понять почему так. Пока делаю вывод: "Слово мощность подходит, но лучше использовать слово длина, в силу исторических причин". Понял. Больше на эту тему не дискутирую. Раз всем так не нравится. Возможно, дело в том что я слишком мало знаю в IT, потому так рассуждаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2014, 01:56 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Лучше - размер/size :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2014, 03:01 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, под размером обычно понимается число занимаемых байт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2014, 10:35 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
RWolfпод размером обычно понимается число занимаемых байт. Нет такого обычая. Размер это просто размер. В любых единицах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2014, 19:35 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЯ могу сказать "половина сантиметра", но не могу сказать "половина символа".Вот математик может быть и не может сказать "половина символа", а тот кто изучает computer science может... Существует единица измерения "ниббл" (nibble) которая как раз и является половиной символа. В нынешнее время она почти не используется, но... SashaMercuryПривел несколько доводов в пользу слова мощность.Неубедительные доводы. SashaMercuryПросто хочу понять почему так.Термины придумываются так, чтобы наиболее точно отражать внутреннюю сущность описываемого объекта. Потом, с течением времени, могут появляться искажения терминов или смена сущности объекта, тогда термин перестает быть прямым описанием сущности и становится просто традиционным названием. И тогда остается только зазубривать его... А еще бывают жаргонные словечки которые оказались настолько удобны что доросли до статуса терминов, при этом все уже забыли источник этого жаргонизма... И в любом случае, прочитай совет mayton'а еще раз и прими его. SashaMercuryПока делаю вывод: "Слово мощность подходит, но лучше использовать слово длина, в силу исторических причин". Понял. Больше на эту тему не дискутирую. Раз всем так не нравится. Возможно, дело в том что я слишком мало знаю в IT, потому так рассуждаю.Слово мощность совсем не подходит. Я тебе уже говорил и повторю еще раз: математика и информатика это две разные науки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2014, 19:35 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Сообщество C: SS4. Где обоснование что числа в длинной арифметике нужно хранить реверсом (хотя вот тут я его не виню, может быть это очевидно для людей со степенью PhD(тут без иронии говорю)) сегодня столкнулся с аналогичной проблемой(аналогичной названию топика). Подскажите пожалуйста, как всё же делать правильно ? Использовать ли реверс ? По поводу памяти, и максимальной длины строки я решил следующее: нужно вводить максимальную планку, так возможно будет безопаснее. Вы согласны ? Или я преувеличиваю. Хочу увидеть классическое, грамотное решение данное задачи. Понимаю, что вы можете снова предложить погуглить(Анатолий ), но результаты этого процесса я обсуждал выше, то что я нашёл мне не понравилось, причём не понравилось обоснованно(как мне кажется). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2014, 09:35 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЗдравствуйте, Сообщество C: SS4. Где обоснование что числа в длинной арифметике нужно хранить реверсом (хотя вот тут я его не виню, может быть это очевидно для людей со степенью PhD(тут без иронии говорю)) сегодня столкнулся с аналогичной проблемой(аналогичной названию топика). Подскажите пожалуйста, как всё же делать правильно ? Использовать ли реверс ? По поводу памяти, и максимальной длины строки я решил следующее: нужно вводить максимальную планку, так возможно будет безопаснее. Вы согласны ? Или я преувеличиваю. Хочу увидеть классическое, грамотное решение данное задачи. Понимаю, что вы можете снова предложить погуглить(Анатолий ), но результаты этого процесса я обсуждал выше, то что я нашёл мне не понравилось, причём не понравилось обоснованно(как мне кажется). gmp изучал ? на счет реверса -- я не очень сильно в теме, но я впервые слышщу о необходимости хранить числа начиная с младших разрядов. P.S. Мало кто понимает, но мы все (большинство европейцев) пишем слова СЛЕВА НАПРАВО, а числа -- СПРАВА НАЛЕВО, и только арабы (ну, и евреи разумеется) пишут и то, и то одинаково. Для правильного написания текста, состоящего из цифр и букв разных алфавитов придуман специальный алгоритм, именуемый BIDI, и зафиксированный в спецификации UNICODE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2014, 10:55 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Нет, gmp не изучал. Сейчас посмотрю. Переделал алгоритм, не то чтобы переделал, просто написал заново, смотрю на свой предыдущий код, и вижу много различий. Код стал другой. Странно. Буду разбираться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 04:10 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Вы имеете ввиду систему норм и правил в отношении производства или библиотеку Си для вычислений с плавающей точкой ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 04:13 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Сегодня читал Спинеллиса, Анализ программного кода. Встретил описание интересных функций, memset,memcpy,memmove. Посмотрите какой код я предлагаю в качестве оптимального(на данный момент, буду рад предложениям по оптимизации) для сложения двух длинных неотрицательных чисел до использования этих функций. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. Чем меня раньше смущала такой участок кода ? Код: plaintext 1. 2. 3. 4. тем, что мне сложно было решить использовать ли фигурные скобки или нет. После моего знакомства с этими функциями в книге, я обратился к стандарту, где встретил их, мне они не показались плохими, и я решил тут-же их использовать. Посмотрите что получилось Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. Код стал более читабелен, и нравится мне больше. Хотя вероятно я проигрываю в скорости и памяти на этом участке кода Код: plaintext 1. 2. 3. 4. ибо Код: plaintext 1. известно как работает. ISO/IEC 9899:201xThe memmove function copies n characters from the object pointed to by s2 into the object pointed to by s1. Copying takes place as if the n characters from the object pointed to by s2 are first copied into a temporary array of n characters that does not overlap the objects pointed to by s1 and s2, and then the n characters from the temporary array are copied into the object pointed to by s1. Конечно -же я не удержался, и использовал чудесный тернарный оператор. MasterZiv, не ругайтесь пожалуйста, но разве этот код не кажется вам более компактным и более понятным ? Я согласен с вами, Си-программисты так делают редко, это возможно плохой тон. Но это так красиво, что мне порой трудно удержаться. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. Используете ли вы функции которые я сегодня встретил ? Не проигрываю ли я в скорости при их использовании(кроме memmove) ? Правильно ли я понял, memmove лучше не использовать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 07:43 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Алгоритм использующий malloc не может быть оптимальным :) Начните с того что отделите выделение памяти от собственно вычислений. Всегда можно сделать функцию поверх них, которая их совместит. memmove в вашем алгоритме не нужна, т.к. нет пересекающихся областей памяти, memcpy - быстрее в теории. Ну и если речь зашла про оптимальность, то хранить и обрабатывать числа в виде десятичных цифр - это далеко не оптимально. Храните в виде 32- или 64-битных двоичных цифр размером в машинное слово. В этом случае ускорятся вычисления, но затормозится отображение (что практически никогда не является критичным) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 13:58 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyНу и если речь зашла про оптимальность, то хранить и обрабатывать числа в виде десятичных цифр - это далеко не оптимально. Храните в виде 32- или 64-битных двоичных цифр размером в машинное слово. В этом случае ускорятся вычисления, но затормозится отображение (что практически никогда не является критичным) Если стоит задача делать финансовые расчёты и часто-часто делать конверсию BIN=>DEC=>BIN для публикации то я-бы предложил BCD. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 14:30 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
mayton, Отчеты - это всегда агрегированные данные, в худшем случае тысячи записей. А исходные данные могут занимать миллиарды записей. Поэтому оптимизировать надо именно вычисления. ЗЫ. Не говоря уже о том что для финрасчетов никакая длинная арифметика не нужна :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 14:38 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Кстати Oracle хранит мантиссу числа Number в виде цифры 100-ричной системы в двоичном виде в каждом байте. Никакого преимущества при отображении по сравнению с хранением по словам этот формат не дает. И так и так надо в цикле получать остатки для перевода в десятичную систему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 14:47 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, согласен насчёт агрегаций и прочей другой аналитики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 14:56 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyКстати Oracle хранит мантиссу числа Number в виде цифры 100-ричной системы в двоичном виде в каждом байте. Никакого преимущества при отображении по сравнению с хранением по словам этот формат не дает. И так и так надо в цикле получать остатки для перевода в десятичную систему. Зачем? одна 100-ричная цифра это ровно две десятичных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 15:09 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
RWolfЗачем? одна 100-ричная цифра это ровно две десятичных. Вот вам одна 100-ричная цифра в двоичном виде: 01011000 Отобразите ее в десятичной системе без деления :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 15:17 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Хотя я допускаю, что я что-то неверно помню, и оракл хранит все-таки в BCD - по 10-ичной цифре в каждых 4 разрядах. В этом случае конечно не требуется никаких особых действий для отображения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 15:19 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВот вам одна 100-ричная цифра в двоичном виде: 01011000 Отобразите ее в десятичной системе без деления :) Код: sql 1. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 15:31 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov0b01011000 Жалко что С/С++ такого не умеют ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 15:36 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЖалко что С/С++ такого не умеют Умеют. Это документация про такую фичу не знает. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 15:45 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovУмеют. Это документация про такую фичу не знает. Че, прямо все умеют? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 15:51 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЧе, прямо все умеют? Мелкомягкое поделие - не умеет. Но от него никто и не может ожидать соответствия стандартам или спецификациям K&R. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 16:00 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyRWolfЗачем? одна 100-ричная цифра это ровно две десятичных. Вот вам одна 100-ричная цифра в двоичном виде: 01011000 Отобразите ее в десятичной системе без деления :) В чём проблема? 01011000 / 10 = 8 01011000 % 10 = 8 результат: 88 Заметьте, мне не пришлось искать остаток от деления всего числа на 10, я ограничился одной цифрой. А мог вообще обойтись таблицей на 100 входов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 16:02 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
RWolfА мог вообще обойтись таблицей на 100 входов. Да, это оно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 16:27 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyОтобразите ее в десятичной системе без деления :) Деление на вычитание в цикле можно заменить, только еще медленнее будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 16:34 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Я вот летом для себя исследовал сложение в системе Фибоначчи. Интересно так вышло. Отпишу если не забуду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 16:56 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Anatoly MoskovskySashaMercury, Алгоритм использующий malloc не может быть оптимальным :) Начните с того что отделите выделение памяти от собственно вычислений. Всегда можно сделать функцию поверх них, которая их совместит. Лучше было бы передать в функцию адрес по которому будет записан результат ? Т.о. функция должна нести функционал только касаемо алгоритма, и не должна решать вопросы касаемо аллоцирования ? Прототип такой функции будет выглядеть следующим образом. Код: plaintext 1. Вывод выделенный красным нужно использовать и в дальнейшем при проектировании функций и разработке алгоритмов в целом ? То есть существует негласное правило о том, что нужно отделять алгоритм, от работы с памятью ? Я раньше всегда задумывался об этом, но почему-то выбирал тот вариант, по которому вы сделали замечание. Хотя мне ваше замечание нравится, оно вполне обоснованно, и я буду рад его использовать, если вы подтвердите то, что я написал выше. Anatoly Moskovskymemmove в вашем алгоритме не нужна, т.к. нет пересекающихся областей памяти, memcpy - быстрее в теории. разве в данном случае нет пересекающихся областей ? Код: plaintext 1. 2. 3. 4. Почему memcpy быстрее в теории ? Это не макрозамена, как например getchar()? Anatoly MoskovskyНу и если речь зашла про оптимальность, то хранить и обрабатывать числа в виде десятичных цифр - это далеко не оптимально. Храните в виде 32- или 64-битных двоичных цифр размером в машинное слово. В этом случае ускорятся вычисления, но затормозится отображение (что практически никогда не является критичным) то есть сейчас я использую 1 байт на 1 знак, а если буду хранить числа в массиве int, и получить результирующее число как результат контактенции этих чисел, то я буду тратить хм..4 Байта,2^32<10^10, значит 9 знаков на 4 Байта, т.о. выигрываю где-то в два раза,1 знак-4/9 байта. Я вас правильно понял ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 03:39 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonЯ вот летом для себя исследовал сложение в системе Фибоначчи. Интересно так вышло. Отпишу если не забуду. отпишите, будем ждать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 03:40 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Допустим я разделяю алгоритм и работу с памятью. Тогда я не буду знать сколько нужно памяти выделять на сумму. Значит мне нужно, для реализации всего, реализовать две функции и одну статическую внешнюю переменную, в которую функция будет передавать длину результата, и только потом будет запускаться вторая функция, и выделять память для результат. И мне мало того что она статическая внешняя. Хочется сделать чтобы она была видна только двум этим функциям, и никакие другие функции не могли бы её изменить. Но я не встретил такого класса памяти к K&R и в стандарте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 04:41 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Сегодня разминался, нужно было считать данные из файла. Первая строка количество строк квадратной матрицы, затем все элементы матрицы по строкам. Вот так организовал чтение данных Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. Разделил чтение данных, и выделение памяти ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 09:20 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury, сходу закину тебе поток тегов для размышления. В математической физике при решении дифуров часто нужны офигенские матрицы заполненные в основном нулями. И лишь на диагонали лежат значимые коэффициенты. И еще где-то децл ненулевых элементов. Причём еще и зеркальны относительно диагонали. Вобщем тут на англичанской мове основные тезисы: http://en.wikipedia.org/wiki/Sparse_matrix Подумай над этим. P.S. Ну как закинул? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 12:14 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury Код: plaintext 1. 2. 3. 4. Тут я-бы по другому переписал Код: plaintext 1. 2. 3. Ну и цикл естественно в обратную сторону развернуть. Кстати это может быть объяснением по поводу отсутствия в API memcpy копирующей на символ назад. Возможно по соображениям неэффективной хардварной реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 12:24 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury//установка стартового значения //пишем в конец результирующей строки минимальное число Скопировав в результат длиннейшее число ты сэкономишь время как на копировании, так и на сложении. SashaMercury//сдвиг return res; Вернув res+1 ты сэкономишь время на сдвиге. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 14:02 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Если создать класс - "цепочка операций" (OperationChain) то можно некоторые действия сокращать. К примеру в следующем примере арифметика сокращается законами алгебры. Код: plaintext 1. Ну или если Саша допилит умножение то учитывать умножение не ноль в конце цепочки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 14:29 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДопустим я разделяю алгоритм и работу с памятью. Тогда я не буду знать сколько нужно памяти выделять на сумму. Значит мне нужно, для реализации всего, реализовать две функции и одну статическую внешнюю переменную, в которую функция будет передавать длину результата, и только потом будет запускаться вторая функция, и выделять память для результат. И мне мало того что она статическая внешняя. Хочется сделать чтобы она была видна только двум этим функциям, и никакие другие функции не могли бы её изменить. Но я не встретил такого класса памяти к K&R и в стандарте Этот "класс памяти" называется аргумент функции :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 14:48 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Оптимизации различные рассмотреть. Что будет после la_sum("12345678", "0"); Можно ли вернуть ccылку на первый аргумент? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 15:01 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
только пришёл. mayton, мы все знакомы с разряженными матрицами:) У программистов вероятно возникает вопрос как бы их хранить. Anatoly Moskovsky, я вас понял, потому привёл пример выше. Мои выводы касаемо разделения алгоритма и работы с памятью верны ? Спасибо всем за предложения по оптимизации. Завтра исправлю код. Мне пора : ( Доброго времени суток, Сообщество :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 16:05 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Это выкинуть. Если матрица - квадратная то не нужно аллоцировать отдельно строки. SashaMercury//выделение памяти на матрицу nxn Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Вот так правильно Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 16:43 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Стесняюсь спросит, когда уже компилятор С-шный будете использовать? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 19:13 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, поискал в настройках VS 2013 Express, и не нашёл как это сделать. Потом 'погуглил', и ответа на вопрос также не нашёл. Видимо плохо искал. Вообще это я стесняюсь такие вопросы задавать, потому не спросил тут, как это сделать тут. mayton, это я понимаю. Просто мне захотелось сделать так как я сделал. честно:) А вот раз вы привели такой пример, то у меня вопрос. Ваш пример выигрывает в скорости, и это очевидно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 01:46 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Переименуйте файл из .cpp в .c :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 02:07 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Спасибо.. перестал работать тернарный оператор : ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 02:30 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
говорит что левый операнд должен быть L-value. В Си, тернарный оператор используется только для присваивания.., правильно догадался? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 02:31 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Исправил Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. что вы имеете ввиду под словом "in-place" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 03:31 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryперестал работать тернарный оператор : ( Потому что вы его используете невпопад. Он предназначен для вычисления условных выражений, а не для записи оператора if в одну строку. SashaMercuryчто вы имеете ввиду под словом "in-place" ? Что результат записывается в переданный аргумент ("по месту"), а не выделяется память. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 04:03 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Понятно. Кстати, никто так и не ответил. Используете ли вы сейчас эти функции в своей работе ? memcpy, memset, memmove, или они не устраивают вас как и fscanf ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 04:23 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Используем. И scanf тоже, где это уместно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 05:06 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercurymayton, это я понимаю. Просто мне захотелось сделать так как я сделал. честно:) А вот раз вы привели такой пример, то у меня вопрос. Ваш пример выигрывает в скорости, и это очевидно ? Для обычных (неразрежённых) матриц, кубов, гиперкубов мой пример выигрывает в скорости, простоте кодирования, в быстром доступе к элементу по индексу. Мой пример также уменьшает нагрузку на аллокатор памяти ОС и не флудит ненужными транзакциями на выделение-освобождение. Но в данном конкретном кейсе самое главное преимущество - дуракоустойчивость. Он прост как АК-47 и его невозможно поломать или испортить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 09:54 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Хорошо. Я всё запомнил. Спасибо всем :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 14:04 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Кстати, олимпиада проходила по математике, может кому-нибудь будет интересно, привожу пару простых задач: 1. На доске написаны 10 чисел: единица и 9 нулей. Разрешается выбрать любые два числа, и заменить каждое из них средним арифметическим. Какое наименьшее число может получиться на месте единицы после серии(сколь угодного количества) таких операций ? 2. Докажите что функция нечётная. Прошу прощение за офтоп, но сегодня ведь пятница, и может быть кто-нибудь захочет размяться немножко перед 4 днями высыпания и отдыха C:. Тем более задачи не сложные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 14:28 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЯ всё запомнил. А меня проигнорировал. Зря. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 14:33 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Дмитрий, ваши выводы выписаны у меня на листt формата А4. У меня есть блокнот, в него я выписываю все важные выводы. Например сегодня появилась запись: разделяй алгоритмы и работу с памятью, Anatoly Moskovsky . Если пролистать несколько страниц назад, то можно встретить рассуждения про контрольную печать, это были предложения Ильи, потому подписано MasterZiv. Также есть предложение от mayton(извините, я не знаю имя: () и Дмитрия (Dima_T). Всё записываю, и иногда читаю. Все предложения(не проверенные) я выписываю в список на листах формата А4, и проверяю их все. Ваше предложение, прежде чем использовать, я должен проанализировать.Сегодня у меня болели глаза, и потому в основном я читал книги и решал математические задачи, особенно не программировал если честно.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 14:48 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryКстати, олимпиада проходила по математике смешные у тебя задачки какие - то ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 15:08 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury от mayton(извините, я не знаю имя: () Марк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 15:19 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВаше предложение, прежде чем использовать, я должен проанализировать.Сегодня у меня болели глаза, и потому в основном я читал книги и решал математические задачи, особенно не программировал если честно.. Ну так реши математическую задачку: есть число длиной N знаков и число длиной M знаков. N >> M. Сколько элементарных математических операций надо провести чтобы добавить первое число к второму (дополненному нулями до длины N) и наоборот? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 15:53 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovSashaMercuryВаше предложение, прежде чем использовать, я должен проанализировать.Сегодня у меня болели глаза, и потому в основном я читал книги и решал математические задачи, особенно не программировал если честно.. Ну так реши математическую задачку: есть число длиной N знаков и число длиной M знаков. N >> M. Сколько элементарных математических операций надо провести чтобы добавить первое число к второму (дополненному нулями до длины N) и наоборот? Вы знаете, я всё таки подумал сейчас. И понял почему я сделал именно так, записал в результат минимальное число. Пока я не вижу что вы правы(хотя возможно ошибаюсь). Предложите вашу реализацию, пожалуйста. Доброго времени суток ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 16:08 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
ИзопропилSashaMercuryКстати, олимпиада проходила по математике смешные у тебя задачки какие - то Раз смешные, то жду решение :) первая так вообще для программистов задача ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 16:12 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВсе предложения(не проверенные) я выписываю в список на листах формата А4, и проверяю их все. Ваше предложение, прежде чем использовать, я должен проанализировать.Сегодня у меня болели глаза, и потому в основном я читал книги и решал математические задачи, особенно не программировал если честно.. Чел. Когда болят глаза нужно во перых отдохнуть. Во вторых сменить обстановку. Хорошее расслабление - игра в Пинг-Понг. Когда ты следишь за шариком то хрусталик глаза постоянно меняет фокус и тем самым тренируется и восставливает зрение. Еще хороший кейс - носить такие чёрные очки с дырочками сеткой. Но здесь лучше консультация с офтальмологом. Вобщем не надо геройствовать. Слепой программер никому не нужен если чо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 16:25 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПока я не вижу что вы правы(хотя возможно ошибаюсь). Ну так реши-таки задачу. Дай простой и точный ответ сколько операций потребуется для каждого случая. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 16:50 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
А умножать когда будем-то? Топчемся... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 16:52 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovSashaMercuryВаше предложение, прежде чем использовать, я должен проанализировать.Сегодня у меня болели глаза, и потому в основном я читал книги и решал математические задачи, особенно не программировал если честно.. Ну так реши математическую задачку: есть число длиной N знаков и число длиной M знаков. N >> M. Сколько элементарных математических операций надо провести чтобы добавить первое число к второму (дополненному нулями до длины N) и наоборот? N+1, в обоих случаях, это очевидно. PS Вообще, операция суммы коммутативна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 02:42 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonА умножать когда будем-то? Топчемся... А я уже умножал, только не оптимально. Сейчас разберёмся с оптимальной суммой(у Dimitry Sibiryakov есть идея, и он считает что она верна, возможно он прав ), и будем оптимально умножать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 02:44 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonSashaMercuryВсе предложения(не проверенные) я выписываю в список на листах формата А4, и проверяю их все. Ваше предложение, прежде чем использовать, я должен проанализировать.Сегодня у меня болели глаза, и потому в основном я читал книги и решал математические задачи, особенно не программировал если честно.. Чел. Когда болят глаза нужно во перых отдохнуть. Во вторых сменить обстановку. Хорошее расслабление - игра в Пинг-Понг. Когда ты следишь за шариком то хрусталик глаза постоянно меняет фокус и тем самым тренируется и восставливает зрение. Еще хороший кейс - носить такие чёрные очки с дырочками сеткой. Но здесь лучше консультация с офтальмологом. Вобщем не надо геройствовать. Слепой программер никому не нужен если чо спасибо, это точно пригодится. Поставлю на телефон PS 1 задача ответ 1/512 2 задача Пусть f(x) нечётная, тогда т.о. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 02:55 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryN+1, в обоих случаях, это очевидно. Бздынь, ответ неправильный. Что ты будешь прибавлять, когда у тебя кончатся цифры в числе M? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 12:44 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, нули, очевидно. сложите числа 123999999999999 и 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 13:17 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Оки доки челы. Вобщем Фибоначчи. Этот чортов старик кроликов разводил. Не знаю чем там закончилось. Развёл он этих кролей ОВЕР 9000 или зарубил на мясо. Неважно. Но он пришёл к какой-то формуле через численность кроликов. Типа N(i) = N(i-1) + N(i-2). Получился Ряд Фибоначчи. Код: plaintext 1. Вот так вот. Позиционная система счисления в виде коэфф Фибоначчи обладает интересными свойствами. Чуть позже опишу. Нужна бумага и ручка. Текстом ненаглядно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 14:40 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
mayton, ждём-ждём :) PS Dimitry SibiryakovSashaMercuryN+1, в обоих случаях, это очевидно. Бздынь, ответ неправильный. Что ты будешь прибавлять, когда у тебя кончатся цифры в числе M? 999+1 |m|=3 |n|=1 s_0=(1+9)%10=0,d=1 s_1=0 s_2=0 s3=d=1 4 операции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 15:28 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВообще, операция суммы коммутативна. Это в плане результата она коммутативна. А у самого процесса есть весьма отличающиеся варианты. SashaMercury999+1 И почему извращенцы всегда берут частный, экстремальный и при этом весьма маловероятный случай?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 15:57 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, тогда и формулировать вопрос надо соответственно: сколько в среднем операций потребуется, чтобы… ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 16:56 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
RWolfтогда и формулировать вопрос надо соответственно: сколько /в среднем/ операций потребуется, чтобы Зачем же облегчать задачу?.. Кнут в своём многотомнике всегда отдельно просчитывает наилучший и наихудший случаи. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 17:40 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovSashaMercuryВообще, операция суммы коммутативна. Это в плане результата она коммутативна. А у самого процесса есть весьма отличающиеся варианты. SashaMercury999+1 И почему извращенцы всегда берут частный, экстремальный и при этом весьма маловероятный случай?.. ;) RWolf, а сколько же потребуется в среднем операций ? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2014, 02:54 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryRWolf, а сколько же потребуется в среднем операций ? :) на глаз M + k × (N - M), где k немного больше единицы (для одного случая из десяти сработает перенос в (M+1)-й разряд числа n, для одного из ста — в (M+2)-й и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2014, 12:20 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
По поводу кроликов. Значится так. Всё что я щас буду писать это чортово ИМХО. Можете не соглашаться. Это нормально. По умолчаниями и договорённостям. Классический ряд Фибоначчи начинается с двух единиц 1 1. Я посчитал это избытком и устранил один шаг. В моём варианте ряд начинается как 1 2 3 5 ... e.t.c. Это нисколько не нарушает Фибоначчевых постулатов. Просто мне так удобнее. Далее. Система счисления (СС). В классическом варианте для большинства СС (десятичная арабско-индусская) есть только один вариант как закодировать любое число. Для СС Фибоначчи (ССФ) это не верно. Есть несколько вариантов как закодировать число. Мы будем рассматривать т.н. нормализованную форму числа в ССФ при которой сумма состоит из минимального набора весов (коэффициентов) или весовых коэффициентов (ВК). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2014, 21:56 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2014, 22:03 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Для наглядности я нарисовал таблицу для преобразований в ССФ первых 12 целых чисел. Обратите внимание на одно свойство. Нигде нет подряд идущих двух едниниц. Пара соседних разрядов всегда образуем сумму с переносом в следующий. Это таблица нормированных чисел в ССФ. Далее НЧ-ССФ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2014, 22:06 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
По поводу операций сложения. Смотрим. Первые два кейса - достаточно просты. 1) Сложение без переноса. 2) Сложение и появление ненормализованности. Нормализация которая приводит рекурсивно еще к одной нормализации. Над вариантом (3) я пока еще думаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2014, 23:13 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2014, 23:15 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Неудачный вариант примера. Там происходит денормализация и сдвиг вправо 1 единички за диапазон разрядной сетки. Пока еще не знаю что с этим делать. Можно предположить что сетка справа - виртуальна. Вобщем пока возьмем не 10+2 а 11+3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2014, 00:01 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
RWolfSashaMercuryRWolf, а сколько же потребуется в среднем операций ? :) на глаз M + k × (N - M), где k немного больше единицы (для одного случая из десяти сработает перенос в (M+1)-й разряд числа n, для одного из ста — в (M+2)-й и т.д. мне кажется, ваша аппроксимация верна, на досуге выведу общую формулу возможно. Dimitry Sibiryakov , я правильно понял, вы снимаете свои предложения по оптимизации ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2014, 03:36 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
mayton, у меня такой вопрос, хотелось бы увидеть обоснование данной СС. Не силён в таких вещах, но для двоичной СС это обоснование (в первом приближении) можно провести следующим образом: Докажем следующее утверждение: Любое неотрицательно целое число можно разложить по базису в виде , где принимает либо 0, либо 1. Доказательство: Фиксируем n. Докажем что . Разложение по базису неотрицательно и имеет минимум в том случае, когда все коэффициенты . Неравенство справа докажем методом математической индукции. 1. -выполнено 2. Предположим что выполнены равенства следующего вида до n включительно из индукционного предположения докажем что используя индукционное предположение получим то Мы доказали неравенство с обоих сторон. Разложение по базису даёт нам вариантов. Причём все они ограничены слева и справа. Докажем что число можно разложить по базису единственным образом(отмечу, что сейчас я строю не совсем корректные с точки зрения математики фразы, базис, например, предполагает что по нему можно разложить любой элемент единственным образом, потому возможно стоило формулировать утверждение следующим образом -"Докажем что ... образует базис", опять таки, я не гнался за строгостью в данном доказательстве и обосновании, целью было лишь показать то, что я хочу увидеть от предложенной СС). Доказательство тривиально, предположим что x1=x2 можно разложить с помощью различных комбинаций. Сравнивая два разложения легко можно показать что они равны. Я думаю, что данное обоснование можно провести для всех СС, основанных на геометрической прогрессии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2014, 05:12 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonДля наглядности я нарисовал таблицу для преобразований в ССФ первых 12 целых чисел. Обратите внимание на одно свойство. Нигде нет подряд идущих двух едниниц. Пара соседних разрядов всегда образуем сумму с переносом в следующий. Это таблица нормированных чисел в ССФ. Далее НЧ-ССФ. Пил компот, и подумал, а нигде и не может быть подряд 2 идущих единиц, если будут две единицы подряд, то по факту это следующий разряд, ибо это значит что наше число будет содержать , то это равносильно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2014, 07:06 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercurymayton, у меня такой вопрос, хотелось бы увидеть обоснование данной СС. Не силён в таких вещах, но для двоичной СС это обоснование (в первом приближении) можно провести следующим образом: Докажем следующее утверждение: Любое неотрицательно целое число можно разложить по базису в виде , где принимает либо 0, либо 1. А нет никакого обоснования. Какое обоснование было у Римлян? Да не было. Просто рисовали символ V как ладонь с большим пальцем отведённым в сторону. 5 пальцев дескыть. Твои арифметические выкладки мне не очень понятны. Зачем ты приводишь аналогию с двоичной системой? Фибоначчи избыточна. Это факт И любое число можно записать массой способов. Чем больше число тем больше вариантов как его записать. Я всего-лишь выдал своё собственное предположение о том что есть нормализованная форма (1 единственная) и некоторое количество ненормализованных. Зачем это нужно? Ну... далее по тексту расскажу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2014, 09:26 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonSashaMercurymayton, у меня такой вопрос, хотелось бы увидеть обоснование данной СС. Не силён в таких вещах, но для двоичной СС это обоснование (в первом приближении) можно провести следующим образом: Докажем следующее утверждение: Любое неотрицательно целое число можно разложить по базису в виде , где принимает либо 0, либо 1. А нет никакого обоснования. Какое обоснование было у Римлян? Да не было. Просто рисовали символ V как ладонь с большим пальцем отведённым в сторону. 5 пальцев дескыть. Твои арифметические выкладки мне не очень понятны. Зачем ты приводишь аналогию с двоичной системой? Фибоначчи избыточна. Это факт И любое число можно записать массой способов. Чем больше число тем больше вариантов как его записать. Я всего-лишь выдал своё собственное предположение о том что есть нормализованная форма (1 единственная) и некоторое количество ненормализованных. Зачем это нужно? Ну... далее по тексту расскажу. Марк, я всего лишь провел поверхностное обоснование того, что двоичная система счисления имеет место быть, т.е. что используя разложение можно получить любое неотрицательное целое число, причём единственным образом. Значение этого разложения лежит в закрытом диапазоне целых чисел от 0 до , и число вариантов разложения(в зависимости от коэффициентов ) равно . Далее я показал, что каждое разложение даёт нам уникальное число в 10чной системе счисления. Исходя из всего этого, наше утверждение доказано. Вот и хочется видеть, что если основание СС использует разложение Фибоначчи, то мы можем с помощью него получить любое число в 10чной СС, причём единственным образом(если два соседних разряда не установлены в 1). Или доказательство без обоснования единственности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2014, 15:10 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Оки доки артишоки. Значить продолжаю свой блог. Надо формализовать что можно делать с ССФ а что нельзя. Что можно делать с числов в ССФ? 1) Left transform. Трансформация влево. На примере 2+3=5 Код: plaintext 1. 2) Right transform. Аналогично. 3 = 2+1 Код: plaintext 1. 3) Protected transform. Запрещенные транформации. Не можем третий весовой коэффициент сдвинуть вправо. Позиции (1) и (2) уже заняты. Арифметический смысл. В ряду Фибоначчи не может быть одинаковых весовых коэффициентов. Код: plaintext 1. 4) Negative and Frac. Отрицательные и дробные значения. . Пока не определены. Младший ВК=1 вправо не сдвигается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2014, 15:39 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryя всего лишь провел поверхностное обоснование того, что двоичная система счисления имеет место быть, т.е. что используя разложение можно получить любое неотрицательное целое число, причём единственным образом. Значение этого разложения лежит в закрытом диапазоне целых чисел от 0 до , и число вариантов разложения(в зависимости от коэффициентов ) равно . Далее я показал, что каждое разложение даёт нам уникальное число в 10чной системе счисления. Исходя из всего этого, наше утверждение доказано. Вот и хочется видеть, что если основание СС использует разложение Фибоначчи, то мы можем с помощью него получить любое число в 10чной СС, причём единственным образом(если два соседних разряда не установлены в 1). Или доказательство без обоснования единственности. Ну... круто конешно. Только ты зря сильно напрягаешся с мат-аппаратом. Я на ходу "постулирую" алгебру. Пока - я иду шаги которые аксиоматичны. Это как точка и прямая. Ну.. нечего пока доказывать. И я не зря привёл Римскую систему как пример. Она - непозиционна. Это означает что в ней нет понятия веса в зависимости от позиции. И операции в столбик в ней не работают. Ну по крайней мере как в десятичной. И не похожа на двоичную. ССФ как я полагаю является позиционной, многозначной системой. Последний тег означает что есть много способов записать одно число. Это вроде как избыточность. ИЧСХ она тоже не похожа на двоичную. Внешняя аналогия - обманчива. Мне просто удобно записывать ССФ как двоичный код. Пример многозначных определний числа 21 = Fib(1000000) (нормализовано) = = Fib(110000) = Fib(101100) = Fib(101011) P.S. Это моё чортово ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2014, 16:03 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonНеудачный вариант примера. Там происходит денормализация и сдвиг вправо 1 единички за диапазон разрядной сетки. Пока еще не знаю что с этим делать. Можно предположить что сетка справа - виртуальна. Вобщем пока возьмем не 10+2 а 11+3. Я бы не использовал термин денормализация . Числа бывают нормализованные и ненормализованные. Причём это всё вроде бы, если мне не изменяет моя память, о мантиссе числа с плавающей точкой. А целые -- они бывают в доп-коде и со знаком. Допкод встречается чаще, там никаких нормализаций нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2014, 16:11 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Можно сказать свёртка . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2014, 16:33 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonОки доки артишоки. Значить продолжаю свой блог. Надо формализовать что можно делать с ССФ а что нельзя. Что можно делать с числов в ССФ? 1) Left transform. Трансформация влево. На примере 2+3=5 Код: plaintext 1. 2) Right transform. Аналогично. 3 = 2+1 Код: plaintext 1. 3) Protected transform. Запрещенные транформации. Не можем третий весовой коэффициент сдвинуть вправо. Позиции (1) и (2) уже заняты. Арифметический смысл. В ряду Фибоначчи не может быть одинаковых весовых коэффициентов. Код: plaintext 1. 4) Negative and Frac. Отрицательные и дробные значения. . Пока не определены. Младший ВК=1 вправо не сдвигается. артишоки :DDD а почему в первом примере у вас 2 единицы расположены рядом ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2014, 16:08 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Из ненормализованной формы Fib(110) перевел в нормализованную Fib(1000). 2+3=5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2014, 16:13 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
артишоки :DDD Это цитата из фильма . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2014, 16:14 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
я долго смеялся :D такой фильм не видел а второй пример наоборот. Я думал что если мы работаем с ССФ, то уже предполагаем что две 1 рядом не будут расположены.(разница между ненормализованной и нормализованной понятна, думал что ССФ нормализованная). Доброго времени суток :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2014, 16:22 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Илья предлагает не использовать эти термины. Можно их заменить на свёрнутая и развёрнутая формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2014, 16:29 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Не вытерпел, достал "Популярные лекции по математике": Н.Н. Воробьёв, "Числа Фибоначи", 5-е издание, 1984 г. Стр.37Фактически описанный процесс является последовательным выделением из числа a слагаемых, равных наибольшим возможным числам ФибоначчиПодчёркнуто мною. Далее доказывается, что:Стр.38всякая последовательность из n -1 нулей и единиц, начинающаяся с единицы и не содержащая двух единиц подряд, есть фибоначчиева запись Ф(a) некоторого числа a ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2014, 16:42 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Вась. Ну вот отлично. Ты вычитал умную статью. Я же не против того что в номальном числе в ФСС нет подряд идущих единиц. Но мне для РЕАЛИЗАЦИИ операции сложения в столбик необходимо временно денормализовать число. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2014, 17:53 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonВась. Ну вот отлично. Ты вычитал умную статью. Я же не против того что в номальном числе в ФСС нет подряд идущих единиц. Но мне для РЕАЛИЗАЦИИ операции сложения в столбик необходимо временно денормализовать число. если временно, то почему нет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 01:55 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Сегодня утром сделал следующий, вполне обоснованный вывод, по части именования переменных в которых хранится информация о длине строки. У нас есть стандартная функция Код: plaintext 1. , она возвращает число символов без терминального нуля. Таким образом, мы можем именовать переменную в которой содержится это значение либо len, либо size, либо s, но size название неудачное, в силу того, что уже есть имя типа данных с похожим название, Код: plaintext 1. Имя s также не подходит, в силу того, что s больше ассоциируется со строкой Код: plaintext 1. Остаётся вариант len(l не подходит, в силу того, что похожа на 1): Код: plaintext 1. Допустим нам нужно передать в функцию длину строки вместе с завершающим нулем, вариант len не подходит, ибо как мы поймём по прототипу функции что мы передаём, длину с завершающим нулем или нет. Остаётся вариант с мощностью p. Код: plaintext 1. Удобно, коротко, нативные ассоциации в связи с тем, что строка есть массив/множество символов. Сделал умножение, алгоритм мне не нравится, ибо мне кажется что он далеко не оптимален. Тут код С++, потому что мне сложно отказаться от тернарного оператора. Он мне слишком нравится, чтобы его не использовать Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 04:12 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
А вот сейчас делаю сочетания, может быть кто-нибудь подскажет как обосновать что этот алгоритм будет работать за один проход ? Либо обратное ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 07:37 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Прошу прощение, ошибка Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 07:41 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
"Меня опять терзают смутные сомнения", что тяжело вам будет в коллективе программистов с вашим подходом к именованию переменных. Числитель и знаменатель это, всё-таки, nominator и denominator. Что до доказательства ... Факториал тривиально развёртывается в цикл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 07:52 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, только исходя из того что этот код для программистов, а не для математиков, я назвал числитель и знаменатель так, как назвал. И несмотря на это, мне это именование нравится(причем вполне обоснованно нравится), ибо эти слова похожи, и их смысл сразу понятен, даже для тех, кто не знает английский язык. К сожалению, ваше доказательство не подходит. PS (не обижайтесь пожалуйста, но у вас ошибка в слове числитель, правильно numerator) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 07:59 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Вот что получил в итоге. Но этот код плохой. Плохая работа с памятью, как минимум Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 08:02 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
up и down - состояние (сетевых) интерфейсов, а не положение чисел в дробях. Ну или направления движения Кроме того, хотя могу и ошибаться, но требуются очень веские причины, чтобы выделять целые в куче. Внутри функции - мне даже в голову ничего не приходит. С числителем - да, опечатался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 08:10 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Перепишем дробь в таком виде: Код: sql 1. 2. 3. Можно не перемножать числа в диапазоне от min(m, n-m) до max(m, n-m), включительно. Но, учитывая высокую скорость рост факториала, надо взять (асимптотическую) аналитическую формулу и считать (натуральный) логарифм числа сочетаний. И потенцировать по мере надобности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 08:20 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov Кроме того, хотя могу и ошибаться, но требуются очень веские причины, чтобы выделять целые в куче. Внутри функции - мне даже в голову ничего не приходит не очень понял, объясните пожалуйста. PS Доводы по поводу up и down принимаю и буду иметь в виду. Спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 08:26 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. тут немного изменил. но проблема не в этом, а в том как я работаю с res. в la_multiplication происходи malloc, и потом память не освобождается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 08:35 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovв диапазоне от min(m, n-m) до max(m, n-m), включительноНижняя исключительно, верхняя - включительно, т.е. от (min(n, n-m) + 1) до max(n, n-m). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:13 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryне очень понял, объясните пожалуйстаЕсть регистры, статическая память, стек и куча. Первых двух касаться не будем. Запись: Код: sql 1. даёт нам переменную для указателя на стеке и отдельно, со своими накладными расходами, область памяти для хранения целого в куче. Возникает вопрос - зачем? Чтобы израсходовать лишнюю память на хранение, процессорные такты на выделение и косвенную адресацию, а потом ещё решать проблему утечек? Почему нельзя делать просто: Код: sql 1. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:21 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovBasil A. Sidorovв диапазоне от min(m, n-m) до max(m, n-m), включительноНижняя исключительно, верхняя - включительно, т.е. от (min(n, n-m) + 1) до max(n, n-m). понял вас ) В моей программе это исправляется одной строчкой Код: plaintext 1. 2. 3. 4. SSBasil A. Sidorov Кроме того, хотя могу и ошибаться, но требуются очень веские причины, чтобы выделять целые в куче. Внутри функции - мне даже в голову ничего не приходит не очень понял, объясните пожалуйста. PS Доводы по поводу up и down принимаю и буду иметь в виду. Спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:23 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovSashaMercuryне очень понял, объясните пожалуйстаЕсть регистры, статическая память, стек и куча. Первых двух касаться не будем. Запись: Код: sql 1. даёт нам переменную для указателя на стеке и отдельно, со своими накладными расходами, область памяти для хранения целого в куче. Возникает вопрос - зачем? Чтобы израсходовать лишнюю память на хранение, процессорные такты на выделение и косвенную адресацию, а потом ещё решать проблему утечек? Почему нельзя делать просто: Код: sql 1. ? а как я массивы буду хранить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:26 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryа как я массивы буду хранить ?Как-то так: Код: sql 1. P.S. Я бы посмотрел на уже имеющиеся пакеты длинной арифметики прежде, чем начать изобретать собственный велосипед. Чтобы не делать треугольных колёс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:31 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСделал умножение, алгоритм мне не нравится, ибо мне кажется что он далеко не оптимален. Тут код С++, потому что мне сложно отказаться от тернарного оператора. Он мне слишком нравится, чтобы его не использовать Саш... ну слов нет. Мне кажется чтение стандартов тебе только вредит. Каша у тебя в голове. Пиши весь код на С++. Делай file extension на как с++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:34 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Сочетания в один проход не работают. Пример . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:36 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonSashaMercuryСделал умножение, алгоритм мне не нравится, ибо мне кажется что он далеко не оптимален. Тут код С++, потому что мне сложно отказаться от тернарного оператора. Он мне слишком нравится, чтобы его не использовать Саш... ну слов нет. Мне кажется чтение стандартов тебе только вредит. Каша у тебя в голове. Пиши весь код на С++. Делай file extension на как с++. почему каша ?( мне просто очень нравится этот оператор :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:37 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercurymaytonпропущено... Саш... ну слов нет. Мне кажется чтение стандартов тебе только вредит. Каша у тебя в голове. Пиши весь код на С++. Делай file extension на как с++. почему каша ?( мне просто очень нравится этот оператор :( Тернарный оператор был изначально в "C". Это замечание к твоей фразе о выборе С или С++. (я надеюсь третьего варианта здесь нет). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:46 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonSashaMercuryпропущено... почему каша ?( мне просто очень нравится этот оператор :( Тернарный оператор был изначально в "C". Это замечание к твоей фразе о выборе С или С++. (я надеюсь третьего варианта здесь нет). В Си тернарный оператор используется только для присваивания, а не для того, как я люблю его использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:52 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Вот ещё скриншот ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:55 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. тут немного изменил. но проблема не в этом, а в том как я работаю с res. в la_multiplication происхомди malloc, и потом память не освобождается. Атомарные типы на стеке удаляются автоматом при выходе из функции. Например если ты написал функцию int sum(int x,int y) которая просто складывает два числа и возвращает резалт - то ты имеешь замечательную возможность использовать рекуррентные формы такие как: Код: plaintext 1. Код: plaintext 1. То-же самое для char* это сделать сложно т.к. мы теряем результата второго каллбэка sum(..) и он утекает вникуда до тех пор пока ОС не завершит процесс. Вобщем получаем мемори лик. Это дефект или артефакт "C"-like декларации функции которая должна ВЕРНУТЬ строку. И ему уже 100 лет в обед. Здесь сам Бог или Страуструп велит использовать С++/STD с шаблонами строк или чисел. Опять же странно что ты здесь не использовал возможности С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 10:00 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury, по поводу присваивания - ОК. Убедил. Но не злоупотребляй синтаксисом. Знавал я перцев которые тело цикла for переносили в выражение for. Код работал но при этом был аццки нечитабелен. Были красавцы которые любят ВЛОЖЕННЫЙ тернарный оператор или пытаются КАЖДЫЙ if в коде разложить в тернарность. Где-то получается. Где-то нет. Разумеется читать код - невозможно. Хочется руки оторвать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 10:04 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonТо-же самое для char* это сделать сложно т.к. мы теряем результата второго каллбэка sum(..) и он утекает вникуда до тех пор пока ОС не завершит процесс. Вобщем получаем мемори лик. Это дефект или артефакт "C"-like декларации функции которая должна ВЕРНУТЬ строку. И ему уже 100 лет в обед. Здесь сам Бог или Страуструп велит использовать С++/STD с шаблонами строк или чисел. Опять же странно что ты здесь не использовал возможности С++. создам реплику той функции, которая будет освобождать память для аргументов перед выходом. Не использовал возможности, потому что не знаю их. maytonSashaMercury, по поводу присваивания - ОК. Убедил C: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 10:08 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryА вот сейчас делаю сочетания, может быть кто-нибудь подскажет как обосновать что этот алгоритм будет работать за один проход ? Либо обратное ? По поводу расчёта сочетаний. Алгоритм не смотрел пока. Ничего не скажу. Для опровержения его нужно тестить. Для доказательства - х.з. Можно взять канонический и через эквивалентные преобразования доказать равенство. Но впрочем в процессе преобразований можно наломать боков. Так что... путь долгий. По поводу прямой формулы. Она редко используется для больших чисел. В числителе и знаменателе - аццки огромные числа хотя впрочем частное не такое великое. Разумеется математи середины 20 века не имели технически возможности посчитать большой факториал. ПОэтому обычно берут приближённый расчёт через Пуассончик. Интеграл Пуассона. Он даёт вполне приемлемую точность. Поскольку Пуассончик - неберущийся то обычно используют его табличное задание. А в софте - интеграл методом прямоугольников. Если функция С(m,n) будет стоять под оптимизацией то можно использовать Треугольник Паскаля как кеш или частичную мемоизацию. Суть в том что если вы раньше расчитали С(m-1,n), C(m,n-1) то С(m,n) можно получить просто сложением от ранее расчитанного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 10:17 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНе использовал возможности, потому что не знаю их. Да што там. Подключ std::string и используй их как хранилище целых чисел вместо char *. Заодно и утечки уйдут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 10:20 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonПодключ std::string и используй их как хранилище целых чиселБолее логичным выглядит vector<int> или как его там. Это, опять-таки, если изобретать велосипед. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 10:23 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Не... ему символы блихе IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 10:25 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Марк, мне нужно точное значение. За один проход не сработает. Нужно думать как делать иначе. Проще всего взять готовую реализацию, готовую библиотеку и использовать её. Если я когда-нибудь буду работать программистом С++, то вероятно буду делать так. Но мне нравится программировать, и нравится думать, потому я буду делать это так, как начал делать. Без использования того, что уже реализовано, и не смотря на то, как где-то сделано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 10:27 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonНе... ему символы блихе IMHO. это правда :) я лучше чувствую то с чем работаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 10:28 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Кстати. Подумай над библиотекой рациональных чисел. Так чтобы 1/3 + 2/3 точно равнялось 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 12:34 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovSashaMercuryа как я массивы буду хранить ?Как-то так: Код: sql 1. P.S. Я бы посмотрел на уже имеющиеся пакеты длинной арифметики прежде, чем начать изобретать собственный велосипед. Чтобы не делать треугольных колёс. массив формируется динамически, я не могу хранить его в таком виде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 15:13 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonКстати. Подумай над библиотекой рациональных чисел. Так чтобы 1/3 + 2/3 точно равнялось 1. мне кажется что данную задачу можно решить проще, да и знаменатель не влезет в 8 Байт в некоторых случаях. Разве только использовать после первого прогона эту библиотеку. Постараюсь решить так как сейчас решаю, нужно додумать как привести знаменатель к 1, это не должно быть сложно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 15:17 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury, даю подсказку. В сложении дробей помогает алгоритм Евклида. https://ru.wikipedia.org/wiki/Алгоритм_Евклида Если взять более общий случай (знаменатели разные) то тебе понадобиться приведение к общему знаменателю. Я в этой задаче пошёл по самому длинному пути. Я раскладывал числа на множители. Для этого мне нужны были все primes в диапазоне знаменателей. Потом я делал булевы операции над primes и получал НОК. Делал сложение числителей с учотов весов. И ... хопа. Снова нужно сокращать. Раскладывал полученый числитель на множители ну вобщем трахомозг. Вобщем я отказался от разложения на primes по одной простой причине. Алгоритм Евклида позволил сделать сокращение дроби без разложения на множители. Это воистину полезный и замечательный алгоритм. Как говоится из серии must have. А от приведения к общ знаменателю я отказался. Я просто множил оба знаменателя. Один хрен.. Евклид работал быстрее любого разложения. И его фаза была финальной в обоих вариантах. Вобщем НОК оказался не нужен. P.S. Попытка разлагать числа на primes вызвала у меня много часов безсонницыт и несколько килобайт букв на этом форуме. Вобщем к этой задаче я еще вернусь. Если будет интересно. Эффективный алго prime-gen я так и не создал. Но гораздо ценнее были практические знания из теории чисел которые я получил в процессе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 16:15 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
mayton, так у вас работают сочетания ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2014, 02:17 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Если честно я еще не смотрел. А что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2014, 09:51 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Наведи порядок в сорцах. У тебя аллоцирование памяти "C"-like, а циклы используешь от С++. Вобщем сделай нормальное приложение. С точкой входа в программу. Давай удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2014, 12:25 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonУ тебя аллоцирование памяти "C"-like, а циклы используешь от С++. Уже 15 лет как в С можно объявлять переменную прямо в цикле :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2014, 12:35 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Ох увы мне увы. Сижу на старых Сях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2014, 13:02 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Подскажите пожалуйста, имеет место быт такой код ? Меня больше интересуют моменты касаемо isFreeMemory Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 08:51 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Разбираюсь с этой memory leak .. Пока что она меня бьёт больше чем я её ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 08:52 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Возьми себе за правило устанавливать указатель в NULL после освобождения памяти. Тогда отлаживать проще будет. Схематично так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 09:11 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. s2 никогда не освободится, есичё )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 10:21 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Dima TВозьми себе за правило устанавливать указатель в NULL после освобождения памяти. Тогда отлаживать проще будет.а лучше взять себе за правило использовать для каждой задачи свою локальную переменную, тогда отлаживать будет ещё проще, особенно, если давать им имена чуть более осмысленные, чем "р", "с" и прочие "ab" ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 10:24 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Dima T, и почему бы не инициализировать переменную прямо по месту её объявления. Схематично так Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 10:26 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
egorychDima T, и почему бы не инициализировать переменную прямо по месту её объявления. Схематично так Код: plaintext 1. 2. 3. Когда так можно сделать, то и проблем нет. Я общий случай описал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 10:45 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
egorychSashaMercury Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. s2 никогда не освободится, есичё ))глупость я написал, освободится, конечно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 10:57 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Dima TegorychDima T, и почему бы не инициализировать переменную прямо по месту её объявления. Схематично так Код: plaintext 1. 2. 3. Когда так можно сделать, то и проблем нет. Я общий случай описал.если сразу проектировать программу в этом стиле, то он и будет общим случаем, с 95% вероятностью ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 11:07 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
egorychDima Tпропущено... Когда так можно сделать, то и проблем нет. Я общий случай описал.если сразу проектировать программу в этом стиле, то он и будет общим случаем, с 95% вероятностью На вкус и цвет ... Задачи разные бывают. У меня на С в основном DLL-ки вспомогательные, которые грузятся всегда, а задействованы могут быть пару раз в году. Какой смысл напрягать проц лишними операциями при загрузке? Поэтому лично я предпочитаю инициализировать NULL, а при необходимости память выделить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 12:24 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryРазбираюсь с этой memory leak .. Пока что она меня бьёт больше чем я её Саш. А ты себя позиционируешь как Windows-C++ разработчик? Или есть другие варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 13:39 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Dima TУ меня на С в основном DLL-ки вспомогательные, которые грузятся всегда, а задействованы могут быть пару раз в году. Какой смысл напрягать проц лишними операциями при загрузке?что бы это значило? в коде char *prt = malloc(...); процессор напрягается в момент исполнения этой строчки кода, если ptr - не глобальный объект. Если функция из dll используется 2 раза в год, то и такая строчка исполнится 2 раза в год, при загрузке библиотеки только DllMain исполняется автоматом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 17:54 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Интересные темы обсуждаете господа, даже поиграть забыл ... maytonSashaMercury, даю подсказку. В сложении дробей помогает алгоритм Евклида. https://ru.wikipedia.org/wiki/Алгоритм_Евклида Если взять более общий случай (знаменатели разные) то тебе понадобиться приведение к общему знаменателю. Я в этой задаче пошёл по самому длинному пути. Я раскладывал числа на множители. Для этого мне нужны были все primes в диапазоне знаменателей. Потом я делал булевы операции над primes и получал НОК. Делал сложение числителей с учотов весов. И ... хопа. Снова нужно сокращать. Раскладывал полученый числитель на множители ну вобщем трахомозг. Вобщем я отказался от разложения на primes по одной простой причине. Алгоритм Евклида позволил сделать сокращение дроби без разложения на множители. Это воистину полезный и замечательный алгоритм. Как говоится из серии must have. А от приведения к общ знаменателю я отказался. Я просто множил оба знаменателя. Один хрен.. Евклид работал быстрее любого разложения. И его фаза была финальной в обоих вариантах. Вобщем НОК оказался не нужен. Жёстко ... a*b = НОК(a,b) * НОД(a,b) - спасибо моему учителю, долгих ему лет здоровья mayton, а что там с СС Фибоначи, так интересно начиналось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 20:57 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
У, как у вас тут интересно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 21:18 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Ну вобщем Фибоначчи я задумывал как один из способов организации кеша Primes. В отличие от кодов Левеншнтейна код Фибоначчи подкупает своей простотой. Но развивая идею я думал о реализации основных 4-х арифметических операциях. И хотя для задачи cachePrimes сложение и вычитание не является необходимостью я просто обобщал и решил а "почему-бы и нет". В мохнатые времена один Росиянин создавал ЭВМ работающую на "троичной" арифметике. Вобщем полёту фантазии нет предела. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 21:52 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Дмитрий, спасибо, я попробую сейчас, исправлю кое-что:) maytonSashaMercuryРазбираюсь с этой memory leak .. Пока что она меня бьёт больше чем я её Саш. А ты себя позиционируешь как Windows-C++ разработчик? Или есть другие варианты? Марк, Нет конечно, какой из меня Программист, или Разработчик. Уже говорил свою позицию по значению слова Программист (Разработчик). Позиционирую себя изучающим язык программирования Си ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 01:57 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Всё получилось :) проблема была немного в другом, впрочем, как мне кажется, с утечками проблема решена также. Всем спасибо. Сегодня всё расскажу и покажу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 03:51 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Сейчас занимаюсь декомпозицией задачи, чтобы выложить её в нормальном виде. Не знаю как правильно это доделать, подскажите пожалуйста Вот такой файл la.h Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. вот такой la.c Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. тут уже косяк. Дважды подключаю stdlib.h но программа пока запускается. Однако, когда я делаю так, sum.h Код: plaintext 1. 2. 3. и так sum.c Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. тут происходит вот что "Error 3 error LNK2005: _freeMemory already defined in main.obj ", в чём проблема понятно, а как исправить пока не дошло ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 05:02 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury, SashaMercuryтут уже косяк. Дважды подключаю stdlib.h но программа пока запускается. Саш, тебе нужно немного почитать о подключении заголовков в C, C++ в *.h файле ты цепляешь заголовки, а не код Вот такой файл la.h Код: plaintext 1. 2. 3. 4. вот такой la.c Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 06:13 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), спасибо! Не знаю почему так сделал(вроде бы сделал сначала правильно, но почему-то сборка прошла неудачно) ( Исправил и всё сразу заработало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 06:21 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), c++ - Include в заголовочных файлах ещё, что бы заголовочные файлы не включались по нескольку раз вставляют директивы препроцессора Код: plaintext 1. 2. 3. 4. SashaMercury , Вот кстати тебе задачка , на неё многие ответить не могут (первый курс универа надо) интересно, сможешь осилить или нет, ответ там простой Графический примитив - линейно залитый цветом треугольник Дано: 3 точки на плоскости, их цвет c1,c2,c3 , треугольник образуемый ими нужно равномерно залить цветом Найти: формулу c(x,y) - ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 06:27 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), не знаю как бы решал первый курс, а я бы решил данную задачу используя билинейную интерполяцию. Тут частный случай, потому скорее всего как-то можно использовать формулу . PS кстати, можно, вероятно, составить систему уравнений, и через нее выразить x y. Подождите :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 06:53 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Буду использовать следующую нотацию . Функция имеет вид , где, и коэффициенты рассчитываются по следующим формулам , , , , . Я бы решал так :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 07:42 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
в t3 опечатка, понятно что там минус ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 07:45 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury, не совсем понял как у вас с зависит от x,y вот тут серьёзные дядьки решают эту задачку, но так делать не стоит, комменты гораздо полезнее Щас народ проснётся, может придумают что, направление у тебя правильное :-) PS: переменная t тебе ни к чему, а вот это поможет уравнения решить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 08:08 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), оператор L зависит от (x,y). Навскидку, "серьёзные дядьки" решают аналогично способу предложенному выше :) А вот в главный файл, что нужно включать ? все хидеры, или только la.h ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 08:16 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryА вот в главный файл, что нужно включать ? все хидеры, или только la.h ? если они у тебя описаны в la.h, то они включатся ориентируйся на простое правило 1. если заголовки тебе нужны для описания типов параметров то включаешь в *.h 2. если используется только в реализации, то в *.cpp, *.c ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 08:25 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Например, у меня 5 пар хидер name.h -файл name.c в каждом name.h подключаю la.h, а в каждом name.c подключаю name.h . В main.c подключаю la.h Вроде бы правильно всё(хотя мне так не кажется), но снова аналогичная ошибка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 08:29 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)что бы заголовочные файлы не включались по нескольку раз вставляют директивы препроцессора Код: plaintext 1. 2. 3. 4. можно проще: первой строчкой в .h написать Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 08:39 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury, надо так la.h Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. la.c Код: plaintext 1. 2. sum.h Код: plaintext 1. 2. 3. sum.c Код: plaintext 1. 2. main.c Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 08:52 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Так и делаю :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 09:40 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)Графический примитив - линейно залитый цветом треугольник Дано: 3 точки на плоскости, их цвет c1,c2,c3 , треугольник образуемый ими нужно равномерно залить цветом Найти: формулу c(x,y) - ? В графическом и геометрическом моделировании ГиГМ никто такую формулу не ищет. Треугольник (в общем случае не коллинеарный оси OX в системе координат) режут на 2 под-треугольника. По средней точке по вертикали OY. Для полученных треугольников ищут уравнения боковых отрезков и делают итератор по алгоритму Брезенхема или используют линейную зависимость в fix-point арифметике на целых числах. Находят 2 точки и заполняют отрезок наиболее быстрым образом (не setPixel) чаще всего черед прямой доступ к памяти графического контекста. Для старинных API использовался доступ к видеопамяти через различные хитрые ухищрения. Для DirectX/OpenGL треугольник fillitся встроенными функциями, которые работают очень быстро и рисуют миллион треугольников в секунду. Та общая формула которая находит принадлежность точки треугольнику - нужна в других задачах но не в fill polyline. Кстати предлагаю подумать над порядком точек. Возможен вариант когда треугольник "вывернут наизнанку" и мы определям обратную формулу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 10:16 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryТак и делаю :( Как так? давай подробнее и с сообщением об ошибке. Это убрал из la.h ? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 10:22 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonВ графическом и геометрическом моделировании ГиГМ никто такую формулу не ищет. Треугольник (в общем случае не коллинеарный оси OX в системе координат) режут на 2 под-треугольника. По средней точке по вертикали OY. Для полученных треугольников ищут уравнения боковых отрезков и делают итератор по алгоритму Брезенхема или используют линейную зависимость в fix-point арифметике на целых числах. Находят 2 точки и заполняют отрезок наиболее быстрым образом (не setPixel) чаще всего черед прямой доступ к памяти графического контекста. вопрос не в том как находятся координаты периметра треугольника, а по какой формуле находится цвет внутри него для точки с координатами (x,y) (т.е. уже известно что она лежит внутри треугольника) цвета точек c1,c2,c3 и их координаты соответственно (x1,y1),(x2,y2),(x3,y3) mayton Для DirectX/OpenGL треугольник fillitся встроенными функциями, которые работают очень быстро и рисуют миллион треугольников в секунду. Та общая формула которая находит принадлежность точки треугольнику - нужна в других задачах но не в fill polyline. то, что кто-то реализовал эти методы за/до вас, не значит что формулы не используются кстати, для перспективной проекции формула будет другая maytonКстати предлагаю подумать над порядком точек. Возможен вариант когда треугольник "вывернут наизнанку" и мы определям обратную формулу. порядок точек не важен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 11:40 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Dima TSashaMercuryТак и делаю :( Как так? давай подробнее и с сообщением об ошибке. Это убрал из la.h ? Код: plaintext 1. SashaMercury, покажи лучше начала всех файлов которые у тебя есть в проекте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 11:44 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)вопрос не в том как находятся координаты периметра треугольника, а по какой формуле находится цвет внутри него для точки с координатами (x,y) (т.е. уже известно что она лежит внутри треугольника) цвета точек c1,c2,c3 и их координаты соответственно (x1,y1),(x2,y2),(x3,y3) ОК. Как будет угодно. Я-бы предложил вынести это в пятничные задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 12:26 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonkealon(Ruslan)вопрос не в том как находятся координаты периметра треугольника, а по какой формуле находится цвет внутри него для точки с координатами (x,y) (т.е. уже известно что она лежит внутри треугольника) цвета точек c1,c2,c3 и их координаты соответственно (x1,y1),(x2,y2),(x3,y3) ОК. Как будет угодно. Я-бы предложил вынести это в пятничные задачи. да ладно, уравнение плоскости через три точки даже на кофе-брейк не тянет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 12:42 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)maytonпропущено... ОК. Как будет угодно. Я-бы предложил вынести это в пятничные задачи. да ладно, уравнение плоскости через три точки даже на кофе-брейк не тянет Тогда давай вернёмся к длинной арифметке. Топик ибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 13:44 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonТогда давай вернёмся к длинной арифметке. Топик ибо. а что там возвращаться, у автора проблемы больше с С++ по сути : 1. если в продакшене, то - GMP, как ему уже советовали 2. если самому разобраться сложить,вычесть - столбиком наверное пойдёт алгоритмы умножения: Метод умножения Шёнхаге — Штрассена , умножение Карацубы , Алгоритм Фюрера деление, остаток от деления - столбиком хватит наверное через вычитание для начала операция k^n mod m - Алгоритм Монтгомери но скорее всего он пока не осилит этого ... SashaMercury, ты в каком классе учишься? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 14:30 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)SashaMercury, ты в каком классе учишься? если, вы читали Лабиринт отражений/Фальшивые зеркала, то вы наверное знаете, что не всегда на такие вопросы можно получить ответы. Всё что вы привели выше, уверен? реализовать смогу. Но я чувствую разницу между прочитать алгоритм и реализовать его(тут и дворник справится), и между самому решить эту задачу(пусть даже для этой задачи уже есть решение). Когда я задаю вопросы, то задаю их не ради получения личной выгоды в виде решения лабораторных, устранения косяков на работе, smth else. Мне это нравится, в первую очередь, нравится думать, писать программы на Си, и видеть результат. Что касается треугольника, то решения уже приведено выше, и оно правильное. Не понимаю почему на хабре ради такой ерунды создавали топик. Решение единственное, и не имеет вариаций. В том смысле, что это равносильно созданию топика о том, как найти определитель матрицы 3x3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 14:44 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)maytonТогда давай вернёмся к длинной арифметке. Топик ибо. а что там возвращаться, у автора проблемы больше с С++ Да нет у него проблем. Просто изучает. В плане оптимизации сложения у меня есть свои мысли. В техникуме на курсе ЦУМПС (цифровые устр. и мк.системы) мы изучали оптимизацию сложения через аппаратные кодеры-декодеры или шифраторы-дешифраторы (не помню точно). Суть - в двоичной системе счисления биты группируются на группы по 4 штуки (тетрада). И для каждой тетрады строится булевая функция. 8+1 входов и 4+1 выхода. Оптимизируется и хардкодится. 5-й выход - это бит переноса. Можно и группировать (наверное) и по 5 битов и более но это вызовет скорее всего резкое усложнение сумматора. Далее полученные аппаратные сумматоры тетрад объединяются в каскады. Полученное устройство и будет максимально оптимизировано. Далее - сколько не разгоняй - всё равно каскады работают последовательно. Но быстрее чем по 1 биту складывать. По поводу умножения. Ну... у меня есть идея цифро-аналогового умножителя (только для вещественных чисел). И не уверен что она всем придётся по вскусу. Уж больно она ... недетерминирована ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 14:45 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
По проекту, ничего уже не покажу. Ибо он на другой машине. Но я заметил вот что, если запускать сборку когда открыт один файл, то всё ок, а если, когда открыт другой файл, то не работает.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 14:55 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 19:16 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 19:20 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 19:21 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
формула для цвета: PS: вот дурной latex здесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 19:23 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
mayton, >> Идеальный код читал я её, кроме первой статьи про регэкспы на С ничего не впечатлило. Зато убило наглухо описание чудовищного хака виртуальной машины C#, чтобы побыстрее графику ( как мне помнится ) рисовать на 4 страницы убористым почерком )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 21:07 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2019209]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
253ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 346ms |

| 0 / 0 |
