Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 1
Регистрация: 05.09.2014
Сообщений: 94
1

Почему перестает работать программа при замене double на long double?

20.01.2015, 15:10. Показов 1716. Ответов 4
Метки нет (Все метки)

Здравствуйте! Прошу помощи чтобы разобраться в следующем вопросе:
Нашел программу в интернете, запустил - все работает, но когда решил поменять тип данных с double на long double программа стала выдавать некорректные результаты...
прошу помочь понять почему
вот и сама программа
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{
   double x0, x1, Nx, Dx, e;
   x0=0.3;
   e=2.7182818284590452353602874713527;
   int i=0;
   do
      {
         i++;
           printf ("%d\t", i);
         x1=x0-0.004*(0.0001*pow(e,30*x0)+x0-6); 
           printf("%20.18f\t", x1);
         Nx=x1-x0;
           printf("%20.18f\t", Nx);
         Dx=0.0001*pow(e,30*x1)+x1-6;
           printf("%20.18f\n", Dx);
         x0=x1;
   } while(Nx!=0);
  return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2015, 15:10
Ответы с готовыми решениями:

При очистке Array of Double в OSX, программа перестает работать
Стоит задача очищать Array of Double при очередном заполнении. Вроде простая процедура. Но при...

long double и double в MSVC 12 одно и тоже, нужна информация,желательно быстрей
Здравствуйте все знают что в VC long double и double одно и тоже, да и при простой проверке это...

Too few parametrs in call to '_fastcall LogN(cont log double, const long double)'
void __fastcall TForm1::Button1Click(TObject *Sender) {int n; double...

Какой спецификатор использовать для корректного вывода типа данных double и long double
Подскажите пожалуйста, какой спецификатор использовать для корректного вывода типа данных double и...

4
Jesus loves me
Эксперт С++
5189 / 3157 / 355
Регистрация: 12.12.2009
Сообщений: 7,972
Записей в блоге: 2
20.01.2015, 15:18 2
попробуй
C
1
printf("%20.18Lf\t", x1);
и т.д.
0
36 / 36 / 22
Регистрация: 18.01.2014
Сообщений: 150
20.01.2015, 15:29 3
Лучший ответ Сообщение было отмечено студ как решение

Решение

Функция pow() предназначена для работы с типом double. Для работы с типом long double можно использовать функцию powl().
1
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
20.01.2015, 18:45 4
А главное выяснить, различаются ли они.
0
0 / 0 / 1
Регистрация: 05.09.2014
Сообщений: 94
20.01.2015, 21:05  [ТС] 5
Нет, с печатью все хорошо, именно так и печатал, считать стало неверно, выходит в бесконечный цикл так как условия равенства нулю не выполняется

Добавлено через 1 минуту
Действительно, надо было менять функцию pow на powl - все стало работать верно! Огромное спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2015, 21:05

Количество знаков после запятой double, Long double
Есть число большой точности A. A=-1.768573656315270993281 742915329544712934120053405549882...

Вывести long double число без перевода в double
Надо вывести long double число без перевода в double. Пишу: printf("%Lf",S); и выводится неверно....

Как обойтись без float, double, long double?
К примеру мне надо в программе использовать что-то вроде -0,00000000000003626686812 и...

Почему мы пишем double x (double y)? а не через запятую double x,y
почему мы пишем double x (double y)? а не через запятую double x,y


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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