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

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

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

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

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

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

Работа с большими числами (массивы) C++
C++ Переделать программу под класс. Т.е. чтобы она работала так же, но с классом
Чтобы программа работала через КЛАСС. Дата некоторого дня характеризуется натуральными числами: m(порядковый номер месяца) и n(число) C++
рабочая программа. но нужно ее переписать так, чтобы она была наиболее общей. C++
C++ Вычислить значение выражения sqrt (2 + sqrt (2 + sqrt (2 ... sqrt2))), (n-слагаемых)
C++ Готовая программа, нужно переделать ее чтобы она работала с УКАЗАТЕЛЯМИ
Дано натуральное число n. Вычислить sqrt(2+ sqrt(5 + sqrt(7...)) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
10.06.2013, 01:59     Переписать функцию sqrt, чтобы она работала с большими числами #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;
}
Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
10.06.2013, 02:01  [ТС]     Переписать функцию sqrt, чтобы она работала с большими числами #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
Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
10.06.2013, 02:11     Переписать функцию sqrt, чтобы она работала с большими числами #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
Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
10.06.2013, 02:14  [ТС]     Переписать функцию sqrt, чтобы она работала с большими числами #5
Цитата Сообщение от Olivеr Посмотреть сообщение
Проверил. Работает хорошо, но с экспоненциальной записью числа плохо дружит.
спасибо огромное, экспоненциальная форма мне не сильно нужна так что ваш вариант полностью мне подходит, еще раз огромнейшее спасибо
MrGluck
Ворчун
Эксперт CЭксперт С++
6435 / 3633 / 452
Регистрация: 29.11.2010
Сообщений: 9,602
10.06.2013, 02:18     Переписать функцию sqrt, чтобы она работала с большими числами #6
В С++11 она перегружена даже для unsigned long long int, думаю диапазона должно хватать более чем.
В конце-концов, long double (даже для С++98)
Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
10.06.2013, 02:54  [ТС]     Переписать функцию sqrt, чтобы она работала с большими числами #7
Olivеr,прошу прощенья, а есть что нибудь для работы с более большими числами? просто сейчас скинули тест число = 72443429860811488009771200000000000000000000, и он его не может обработать корректно=(
Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
10.06.2013, 09:21     Переписать функцию sqrt, чтобы она работала с большими числами #8
Цитата Сообщение от Pokemon_93 Посмотреть сообщение
Olivеr,прошу прощенья, а есть что нибудь для работы с более большими числами? просто сейчас скинули тест число = 72443429860811488009771200000000000000000000, и он его не может обработать корректно=(
У меня работает и выводит 8511370621751321952256.000000. (ОС x64 и компилятор MinGW на основе GCC 4.8.1)
Наверное дело в компьютере или компиляторе.

Добавлено через 3 минуты
Напишите в чем компилируете, какая ОС. Что нибудь придумаем
Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
10.06.2013, 12:13  [ТС]     Переписать функцию sqrt, чтобы она работала с большими числами #9
Olivеr, ос винда 7 х64, MS VISUAL STUDIO 2012. мною был взят другой алгоритм и получилось число 851137100999999, препод принял=) но теперь стоит вопрос какой из результатов верный?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2013, 12:51     Переписать функцию sqrt, чтобы она работала с большими числами
Еще ссылки по теме:

C++ Дополнить функцию, чтобы она находила наиболее встречаемое число
Преобразовать формулу в C++, что бы она там работала C++
Операции с большими дробными числами C++
Операции над большими числами C++
Модернизируйте функцию factorial так, чтобы она не была рекурсивной C++

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

Или воспользуйтесь поиском по форуму:
Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
10.06.2013, 12:51     Переписать функцию sqrt, чтобы она работала с большими числами #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;
}
Yandex
Объявления
10.06.2013, 12:51     Переписать функцию sqrt, чтобы она работала с большими числами
Ответ Создать тему
Опции темы

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