Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2014, 12:34   #1
egoregor
 
Регистрация: 16.10.2014
Сообщений: 6
По умолчанию Расчёт кубичекого корня методом перебора x = x + n

Код:
/**********************************************************
Извлечение кубичекого корня методом перебора x = x + n;
Программа работает, но большие числа считает очень долго.
**********************************************************/
using System;
class __exe { public static void Main () { Console.Clear();

double d = 0.123456789;
double r = r_3 ( d ) ;
double check = r * r * r ; // Проверка результата

Console.WriteLine ("number          = {0}" , d ) ; 
Console.WriteLine ("     r_3  ( d ) = {0}" , r ) ;
Console.WriteLine (" r * r * r      = {0}" , check ) ;

} // Main (end)
/*********************************************************/
public static double r_3 (double d) {
double   x = 0 , r = 0 , i = 0 ;
double lim = double.MaxValue ;

if ( d < 0 ) d = d * ( - 1 ) ;
for ( i = 1 ; i <= lim ; i ++ ) {
  x = x + 1 ;
  r = x * x * x ;
if ( r == d ) { return  x ;         }
if ( r >  d ) { x = x - 1 ; break ; } }

for ( i = 1 ; i <= lim ; i ++ ) {
  x = x + 0.1 ;
  r = x * x * x ;
if ( r == d ) { return  x ;         }
if ( r >  d ) { x = x - 0.1 ; break ; } }

for ( i = 1 ; i <= lim ; i ++ ) {
  x = x + 0.01 ;
  r = x * x * x ;
if ( r == d ) { return  x ;         }
if ( r >  d ) { x = x - 0.01 ; break ; } }

for ( i = 1 ; i <= lim ; i ++ ) {
  x = x + 0.001 ;
  r = x * x * x ;
if ( r == d ) { return  x ;         }
if ( r >  d ) { x = x - 0.001 ; break ; } }

for ( i = 1 ; i <= lim ; i ++ ) {
  x = x + 0.0001 ;
  r = x * x * x ;
if ( r == d ) { return  x ;         }
if ( r >  d ) { x = x - 0.0001 ; break ; } }

return (double) (x) ; }
/*********************************************************/
} // __exe (end)
/************************** END **************************/

Последний раз редактировалось Stilet; 18.10.2014 в 16:29.
egoregor вне форума Ответить с цитированием
Старый 20.10.2014, 15:42   #2
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Вместо того что бы это все городить, просто умножаешь то число из которого ты хочешь извлечь корень на 10000 (это если тебе нужна точность до 4го знака), и делаешь входной параметр целочисленным, либо преобразешь уже в самой функции тем самым отбросив дробную часть и просто используешь часть своей функции:

Код:
for ( i = 1 ; i <= lim ; i ++ ) {
  x = x + 1 ;
  r = x * x * x ;
if ( r == d ) { return  x ;         }
if ( r >  d ) { x = x - 1 ; break ; } }

return (double) (x/10000) ; }
Как и в твоем случае можно говорить об определенной точности вычисления. С целыми числами вычисления проходят быстрее.
Может это и чушь, но это моя чушь и я ее никому не отдам.
Shad0wF1rst вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
решение программы методом перебора krepsh Паскаль, Turbo Pascal, PascalABC.NET 12 26.04.2011 20:37
Решить методом перебора (Delphi) marina43 Помощь студентам 8 05.01.2010 17:14
Поиск текста методом последовательного перебора Des Общие вопросы Delphi 5 30.04.2009 16:15