Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 27.10.2016
Сообщений: 1
1

Вычисление квадратного корня без использования стандартных функций

27.10.2016, 07:03. Показов 4280. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как вычислить квадратный корень без использования функции math.sqrt и библиотеки math в целом?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2016, 07:03
Ответы с готовыми решениями:

Извлечение квадратного корня без использования функции
Всем привет. У меня возник вопрос. Можно ли извлечь корень из числа без функции Math.Sqrt(double);?...

Переписать код обработки массива без использования стандартных функций
Всем привет, дан код и надо реализовать поэлементную обработку массива, или же расписать...

Вычисление квадратного корня из числа (без использования стандартных математических функций)
Напишите программу, вычисляющую квадратный корень из числа (не пользуясь стандартными...

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

8
.NET senior
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
27.10.2016, 08:42 2
Лучший ответ Сообщение было отмечено 3kpvc как решение

Решение

3kpvc, например, можно воспользоваться формулой Герона в её итеративном представлении:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        public static double SqrtByGeron(double value)
        {
            return GeronFunction(value, 3.0, 1, 1000);
        }
 
        public static double GeronFunction(double number, double limit, int step, int count)
        {
            double answer = 0.0;
 
            for (int iteration = step; iteration <= count; ++iteration)
            {
                answer = (limit + (number / limit)) / 2.0;
 
                double diff = (answer - limit) - 1.0;
                if (diff == -1.0 || diff == 1.0)
                {
                    break;
                }
 
                limit = answer;
            }
 
            return answer;
        }
Добавлено через 10 минут
Версия 2.0, с использованием delta-ограничения:

C#
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
        // вызываем так: double result = SqrtByGeron(25.0, 1E-4);
 
        public static double SqrtByGeron(double value, double delta)
        {
            return GeronFunction(value, 3.0, delta, 1, 1000);
        }
 
        public static double GeronFunction(double number, double limit, double delta, int step, int count)
        {
            double answer = 0.0;
 
            for (int iteration = step; iteration <= count; ++iteration)
            {
                answer = (limit + (number / limit)) / 2;
 
                double diff = (answer - limit);
                if (
                    ((diff > 0.0) && (diff <= delta)) ||
                    ((diff < 0.0) && (-diff <= delta))
                   )
                {
                    break;
                }
 
                limit = answer;
            }
 
            return answer;
        }
2
0 / 0 / 0
Регистрация: 25.03.2019
Сообщений: 17
09.05.2019, 17:46 3
Большое спасибо! Я уже пару дней не могу найти квадратный корень с Decimal переменной.
0
311 / 271 / 118
Регистрация: 05.06.2013
Сообщений: 868
09.05.2019, 18:09 4
C#
1
2
3
4
5
6
7
8
9
float Sqrt(float x)
{
    float xhalf = 0.5f * x;
    int i = *(int*)&x;            // evil floating point bit level hacking  
    i = 0x5f375a86 - (i >> 1);    // what the fuck?  
    x = *(float*)&i;                
    x = 1 / (x * (1.5f - xhalf * x * x)); // 1st iteration
    return x;
}
Практически точно считает корень. Погрешность меньше 0.2%
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
09.05.2019, 18:38 5
Graphene, так тут тоже нет decimal
Jefe, язык перепутали
0
311 / 271 / 118
Регистрация: 05.06.2013
Сообщений: 868
09.05.2019, 18:40 6
Цитата Сообщение от КОП Посмотреть сообщение
Jefe, язык перепутали
Но ведь нет же. Работает в C# с разрешением unsafe кода.
0
0 / 0 / 0
Регистрация: 25.03.2019
Сообщений: 17
09.05.2019, 18:41 7
Мне просто нужен был sqrt с типом Decimal, а не Double. Я просто заменил все doublы на decimalы, f на m. И теперь можно пользоватся sqrt для типа данных decimal. Я бы и так использовал sqrt, но там double.
0
311 / 271 / 118
Регистрация: 05.06.2013
Сообщений: 868
09.05.2019, 18:49 8
Цитата Сообщение от Graphene Посмотреть сообщение
Мне просто нужен был sqrt с типом Decimal
https://stackoverflow.com/ques... atype-in-c
0
0 / 0 / 0
Регистрация: 25.03.2019
Сообщений: 17
08.06.2019, 18:32 9
Мне нужна была ещё и точность дэцимал.
0
08.06.2019, 18:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2019, 18:32
Помогаю со студенческими работами здесь

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

Вычисление квадратного корня без cmath
Всем привет. Сделал простенький калькулятор без cmath, &quot;+,-,*,/,степень и квадратный корень&quot;....

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

Как написать генератор чисел без использования стандартных функций?
Нужно написать программу генерирования равномерно распределенных случайных чисел без использования...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru