Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
#1

Переписать функцию sqrt, чтобы она работала с большими числами - C++

10.06.2013, 01:53. Просмотров 557. Ответов 9
Метки нет (Все метки)

желательно что бы корень извлекался из строки и возвращался результат в виде строки
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2013, 01:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переписать функцию sqrt, чтобы она работала с большими числами (C++):

Готовая программа, нужно переделать ее чтобы она работала с УКАЗАТЕЛЯМИ - C++
Вычислить значение выражения тут Вычислить значение выражения (3a+4)/(a-в квадрате-5a-9) для а= 1,2,…100. Результат выполнения занести в...

Переделать программу под класс. Т.е. чтобы она работала так же, но с классом - C++
Дано вещественное число а и натуральное число n. Вычислить : а^1,a^2,a^3,..a^n. Операцию возведения в степень не использовать. ...

Чтобы программа работала через КЛАСС. Дата некоторого дня характеризуется натуральными числами: m(порядковый номер месяца) и n(число) - C++
Дата некоторого дня характеризуется натуральными числами: m(порядковый номер месяца) и n(число). По заданным m и n. Определить: Дату...

рабочая программа. но нужно ее переписать так, чтобы она была наиболее общей. - C++
Задана матрица смежности размерности N*M. С помощью процедуры и матрицы меньшей размерности найти медианы и записать в виде матрицы...

Модернизируйте функцию factorial так, чтобы она не была рекурсивной - C++
Пример программы: // Вычисляющей сумму, разность и факториал // двух чисел #include <iostream.h> class MyInt { int i; ...

Дополнить функцию, чтобы она находила наиболее встречаемое число - C++
Нужно дополнить функцию чтоб она не тока сравнивала одинаковые элементы но и из этих одниноковых элементов находила чаще всего встречаемое...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
10.06.2013, 01:59 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
А насколько большие числа? Длинная арифметика?
Если диапазона double достаточно, то можно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
#include <cmath>
 
using namespace std;
 
string sqrt(const string &str) //если str содержит некорректное число или вовсе не число, 
//то посылается исключение invalid_argument
{
    double x = stod(str);
    x = sqrt(x);
    return to_string(x);
}
 
int main()
{
    string val = "400.0";
    cout << sqrt(val);
    return 0;
}
1
Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
10.06.2013, 02:01  [ТС] #3
Цитата Сообщение от Olivеr Посмотреть сообщение
C++
1
2
3
4
5
6
7
string sqrt(const string &str) //если str содержит некорректное число или вовсе не число, 
//то посылается исключение invalid_argument
{
   double x = stod(str);
   x = sqrt(x);
   return to_string(x);
}
будет ли она работать на числах порядка 10^20
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
10.06.2013, 02:11 #4
Цитата Сообщение от Pokemon_93 Посмотреть сообщение
будет ли она работать на числах порядка 10^20
Должна работать. Сейчас гляну. double вообще может хранить число аж до 1.79769e+308

Добавлено через 7 минут
Проверил. Работает хорошо, но с экспоненциальной записью числа плохо дружит.

UPD: stod нормально работает с экспоненциальной записью, это я туплю
C++
1
2
string val = "1e20";
double x = stod(val); //ok. x == 10^20
1
Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
10.06.2013, 02:14  [ТС] #5
Цитата Сообщение от Olivеr Посмотреть сообщение
Проверил. Работает хорошо, но с экспоненциальной записью числа плохо дружит.
спасибо огромное, экспоненциальная форма мне не сильно нужна так что ваш вариант полностью мне подходит, еще раз огромнейшее спасибо
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,926
10.06.2013, 02:18 #6
В С++11 она перегружена даже для unsigned long long int, думаю диапазона должно хватать более чем.
В конце-концов, long double (даже для С++98)
0
Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
10.06.2013, 02:54  [ТС] #7
Olivеr,прошу прощенья, а есть что нибудь для работы с более большими числами? просто сейчас скинули тест число = 72443429860811488009771200000000000000000000, и он его не может обработать корректно=(
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
10.06.2013, 09:21 #8
Цитата Сообщение от Pokemon_93 Посмотреть сообщение
Olivеr,прошу прощенья, а есть что нибудь для работы с более большими числами? просто сейчас скинули тест число = 72443429860811488009771200000000000000000000, и он его не может обработать корректно=(
У меня работает и выводит 8511370621751321952256.000000. (ОС x64 и компилятор MinGW на основе GCC 4.8.1)
Наверное дело в компьютере или компиляторе.

Добавлено через 3 минуты
Напишите в чем компилируете, какая ОС. Что нибудь придумаем
0
Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
10.06.2013, 12:13  [ТС] #9
Olivеr, ос винда 7 х64, MS VISUAL STUDIO 2012. мною был взят другой алгоритм и получилось число 851137100999999, препод принял=) но теперь стоит вопрос какой из результатов верный?
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
10.06.2013, 12:51 #10
Цитата Сообщение от Pokemon_93 Посмотреть сообщение
Olivеr, ос винда 7 х64, MS VISUAL STUDIO 2012. мною был взят другой алгоритм и получилось число 851137100999999, препод принял=) но теперь стоит вопрос какой из результатов верный?
Правильный результат: 8511370621751321952256
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <cmath>
#include <iomanip>
 
using namespace std;
 
int main()
{
    double x = 72443429860811488009771200000000000000000000.0;
    x = sqrt(x);
    cout << fixed << setprecision(1) << x;
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2013, 12:51
Привет! Вот еще темы с ответами:

Как переделать эту программу, чтобы она выполнялась через функцию? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main() { int Array; cout &lt;&lt; &quot;enter : &quot; &lt;&lt;...

Как переделать эту программу, чтобы она выполнялась через функцию? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main(int argc, char* argv) { int *mas, n, sum;// dinamic...

Забиндить функцию с параметрами, чтобы она хранилась в классе и вызывалась без placeholders - C++
Значит привет всем. Суть в кратце: хочу забиндить функцию с параметрами (кол-во произвольно), чтобы она хранилась в классе, и чтобы я мог...

Цикл: Для числа N вычислить значение следующего выражения: sqrt((1) + sqrt((2) + ... + sqrt(2 * N))) - C++
Как это решить? sqrt((1)+sqrt((2)+..+sqrt(2n)))


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.06.2013, 12:51
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru