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

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

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

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

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

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

Готовая программа, нужно переделать ее чтобы она работала с УКАЗАТЕЛЯМИ - 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. С помощью процедуры и матрицы меньшей размерности найти медианы и записать в виде матрицы...

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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Эксперт С++
6975 / 4146 / 592
Регистрация: 29.11.2010
Сообщений: 10,995
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++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main(int argc, char* argv) { int *mas, n, sum;// dinamic...

Преобразовать формулу в C++, что бы она там работала - C++
Помогите пожалуйстаааа Нужно преобразовать формулу, чтоб она работала в C++.

Операции с большими дробными числами - C++
Доброго времени суток! Мне нужно реализовать калькулятор больших(целых и дробных) чисел. Операции: + - * /. Может у кого-то есть...

Операции над большими числами - C++
Здравствуйте. Хочу создать класс выполняющий арифметические операции над большие числа (знаю что велосипед, делаю в учебных целях). Класс...

Работа с большими числами (массивы) - 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, чтобы она работала с большими числами
Ответ Создать тему
Опции темы

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