|
5 / 5 / 0
Регистрация: 04.05.2019
Сообщений: 32
|
||||||
Алгоритм быстрого извлечения корня (длинная арифметика)07.05.2019, 22:49. Показов 7621. Ответов 13
У меня есть рабочая программа... рабочая, но сильно медленная.
Тормозным местом (до этого все работает очень даже бодро) является извлечение корня ( функция NUMBER Root(const NUMBER Value,const int N) ). Использовал метод бисекции. Вопрос: есть ли какой-нибудь более быстрый алгоритм для того чтобы извлечь корень? Сам код (заранее извеняюсь за возможные 'непрозрачности'):
0
|
||||||
| 07.05.2019, 22:49 | |
|
Ответы с готовыми решениями:
13
Извлечение корня, длинная арифметика Нужен алгоритм извлечения квадратного корня Алгоритм для извлечения квадратного корня x из вещественного числа y |
|
|
|
| 08.05.2019, 06:26 | |
|
методом ньютона решить уравнение с корнем, не?
0
|
|
|
5 / 5 / 0
Регистрация: 04.05.2019
Сообщений: 32
|
|
| 08.05.2019, 12:08 [ТС] | |
|
Я не очень понимаю как в методе ньютона выбрать начальное приближение и как понять что пора прекратить. Ибо я пытался записывать его но, выходила какая-то чушь, не похожая на корень.
P.S. Метод Ньютона это же вот эта формула: Xi+1=Xi-f(Xi)/f'(Xi) ? И за f(Xi) мы берем X^2, а за производную соответственно 2X, или нет?
0
|
|
|
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
||||||||
| 08.05.2019, 19:42 | ||||||||
|
За начальное приближение можно взять, например, двойку в степени делённого на n двоичного логарифма от заданного числа. Двоичный логарифм вычисляется сдвигами или делением. Вот моя функция написанная на python (где поддержка длинных чисел уже есть). Находит целую часть корня степени n от положительного целого числа. Вроде правильно работает, но прям детально я её не тестировал.
1
|
||||||||
|
5 / 5 / 0
Регистрация: 04.05.2019
Сообщений: 32
|
|||||||||||||||||||||
| 08.05.2019, 20:06 [ТС] | |||||||||||||||||||||
|
А что такое a в: f(x)=a-xn и xi+1=(1/n)((n-1)xi+a/xin-1) ?
P.S. Здесь я лучше объяснил ход своих мыслей: Метод Ньютона для извлечения корня Добавлено через 9 минут и ещё
и что значит
и вот это?
0
|
|||||||||||||||||||||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|||||||||||||
| 08.05.2019, 20:32 | |||||||||||||
1
|
|||||||||||||
|
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|||
| 08.05.2019, 20:39 | |||
|
Добавлено через 1 минуту
1
|
|||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
| 08.05.2019, 20:41 | |
|
Но естественно
pow это для обычных чисел.
0
|
|
|
5 / 5 / 0
Регистрация: 04.05.2019
Сообщений: 32
|
|
| 08.05.2019, 20:58 [ТС] | |
|
Ладно. Буду разбираться.
0
|
|
|
5 / 5 / 0
Регистрация: 04.05.2019
Сообщений: 32
|
|
| 09.05.2019, 17:32 [ТС] | |
|
Разобрался с методом Ньютона и возникла одна проблема: необходимость не целочисленного деления (ибо в противном случае крайне велика вероятность зациклиться).
Есть ли какой-то способ, который обходился бы только целочисленным делением (кроме бисекции)? Просто реализовывать ради одной операции извлечения корня длинную вещественную арифметику как-то не радует.
0
|
|
|
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
||
| 09.05.2019, 18:16 | ||
|
0
|
||
|
19 / 14 / 7
Регистрация: 14.03.2019
Сообщений: 71
|
|
| 09.05.2019, 18:48 | |
|
а почему просто не использовать функцию sqrt() из заголовочного файла math.h ?
0
|
|
|
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
||
| 09.05.2019, 18:58 | ||
|
0
|
||
|
5 / 5 / 0
Регистрация: 04.05.2019
Сообщений: 32
|
|
| 09.05.2019, 19:27 [ТС] | |
|
Я вручную считал. И получалось, что если не использовать вещественное деление, то просто начинает скакать между двумя числами, при вещественном делении всё сходится к корню как и положено, достаточно лишь определится с желаемой точностью.
Добавлено через 1 минуту Хммм... а вот если начальное приближение взять строго больше, то вроде всё тоже сходится как и положено. Попробую реализовать.
0
|
|
| 09.05.2019, 19:27 | |
|
Помогаю со студенческими работами здесь
14
длинная арифметика Длинная арифметика Длинная арифметика Длинная арифметика Длинная арифметика Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
|
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|