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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2013, 20:30   #1
Metaluk
Пользователь
 
Регистрация: 06.02.2013
Сообщений: 21
По умолчанию Язык программирования Си. Высокая точность в возвращаемом значении функции.

Требуется, чтобы функция возвращала значение типа long double с точностью до 10^-25. Максимальное возвращаемое функцией значение лишь незначительно превышает 1. Подскажите, пожалуйста, способ, с помощью которого можно это реализовать.
Metaluk вне форума Ответить с цитированием
Старый 02.03.2013, 20:40   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Не очень понял вопроса
Код:
long double
func()
{
    long double a = 1.0;
    return a;
}
Сама точность будет зависеть от того, как Вы проведете расчеты в функции.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 02.03.2013, 20:58   #3
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Даже extended, который в x86, даёт 18-19 значащих десятичных цифр. Если надо больше - это вручную: мантисса, порядок, свои функции...
Somebody вне форума Ответить с цитированием
Старый 02.03.2013, 21:15   #4
Metaluk
Пользователь
 
Регистрация: 06.02.2013
Сообщений: 21
По умолчанию

Честно говоря сам не очень понял.
Функция long double sum(int x);
Она должна возвращать частичную сумму ряда, где i-ый член равен
x_i = 3/(i^3+2i+2).
Вот я ее написал:
Код:
#include <stdio.h>

long double sum(int x);

long double sum(int x)
{
     long double p;
     long int i;
     p = 0;
     for(i = 1; i<=x; ++i) p = p + 3./(i*i*i+2*i+2);
     return p;
}
Но что-то тут не то. Не знаю что.
Есть подсказка:
Высокая точность требуется в возвращаемом значении функции.
То, что отображается в выводе (после перевода в десятичную систему) может быть с меньшей точностью.
Metaluk вне форума Ответить с цитированием
Старый 02.03.2013, 23:33   #5
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Вычислять нужно с другой стороны:
сначала оценить необходимое число членов по остаточному члену, а затем суммировать усеченный ряд с конца.
s-andriano вне форума Ответить с цитированием
Старый 03.03.2013, 20:18   #6
Metaluk
Пользователь
 
Регистрация: 06.02.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
сначала оценить необходимое число членов по остаточному члену
Извините, не понял. Оценить зачем? Это самостоятельно или в программе сделать? Программа такая теперь должна быть?
Код:
#include <stdio.h>

long double sum(int x);

long double sum(int x)
{
     long double p;
     long int i;
     p = 0;
     for(i = x; i>=1; --i) p = p + 3./(i*i*i+2*i+2);
     return p;
}
Здесь тоже что-то не то.

Последний раз редактировалось Metaluk; 03.03.2013 в 20:26.
Metaluk вне форума Ответить с цитированием
Старый 03.03.2013, 22:07   #7
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

i*i*i+2*i+2 влеает в long int при нужных значениях i?
Раз количество итераций известно, оценивать нечего. Но в любом случае складывать числа одного порядка лучше, иначе точность теряется.
Somebody вне форума Ответить с цитированием
Старый 04.03.2013, 07:53   #8
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Metaluk Посмотреть сообщение
Извините, не понял. Оценить зачем?
Встречный вопрос:
А как Вы узнаете, сколько именно членов ряда нужно просуммировать?
s-andriano вне форума Ответить с цитированием
Старый 04.03.2013, 09:09   #9
Metaluk
Пользователь
 
Регистрация: 06.02.2013
Сообщений: 21
По умолчанию

Так это значение будет в функцию как параметр передаваться. Просуммировать нужно значения, которые принимает функция при i=1, 2, 3,...,x
Metaluk вне форума Ответить с цитированием
Старый 04.03.2013, 13:23   #10
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Metaluk Посмотреть сообщение
Так это значение будет в функцию как параметр передаваться. Просуммировать нужно значения, которые принимает функция при i=1, 2, 3,...,x
Такая реализация противоречит условию, а именно, "чтобы функция возвращала значение ... с точностью до 10^-25."
s-andriano вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вложенный класс в шаблон. Указатель на вложенный класс в возвращаемом значении метода шаблона. Что делать? Asya1994 Помощь студентам 3 09.12.2012 01:43
Язык программирования С++ Jasper92 Свободное общение 2 09.11.2009 13:51
Вопрос о возвращаемом из пользовательской функции значении motorway Microsoft Office Excel 4 14.07.2009 16:22
Как сделать ссылку в значении функции? Диагностик Microsoft Office Excel 3 18.02.2009 12:44