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

Log Domain error - C++

Восстановить пароль Регистрация
 
Dragwor
-60 / 0 / 0
Регистрация: 01.04.2013
Сообщений: 104
07.02.2014, 20:06     Log Domain error #1
Поясните начинающему программисту эту ошибку??? Log Domain error
вот код программы, и почему эта ошибка при отрицательном значении???
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{  float x,y1,y2,s,t,kub;
   cout<<"\nvvod x = "; cin>>x;
   s=sin(x)*sin(x);
   t=tan(x)*tan(x);
   kub=(s+s/t)*(s+s/t)*(s+s/t);
   y1=kub+exp(log(x));
   y2=1+x;
   cout<<"\ny1="<<y1;
   cout<<"\ny2="<<y2;
   getch();
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
07.02.2014, 20:12     Log Domain error #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Dragwor Посмотреть сообщение
y1=kub+exp(log(x));
Строчка странная если с ума не сошел то это exp(log(x))=x.... Да и к тому же log не может содержать отрицательный аргумент...
Chernobyl
211 / 211 / 67
Регистрация: 30.09.2012
Сообщений: 526
07.02.2014, 20:17     Log Domain error #3
Нужно устроить проверку ввода, чтобы запретить ввод отрицательных значений. Выше написали, что отрицательного аргумента быть не может.
Dragwor
-60 / 0 / 0
Регистрация: 01.04.2013
Сообщений: 104
08.02.2014, 10:34  [ТС]     Log Domain error #4
А почему тогда при вводе отрицательного значения он выдает ошибку и все равно считает это выражение??? и значение при отрицательном вводе постоянно 1, почему???
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
08.02.2014, 10:50     Log Domain error #5
Цитата Сообщение от Dragwor Посмотреть сообщение
А почему тогда при вводе отрицательного значения он выдает ошибку и все равно считает это выражение??? и значение при отрицательном вводе постоянно 1, почему???
Вполне допускаю что это прикол компилятора: мой например (MVS2012) ошибку не выдает, но и ответ странный: -1.#IND...
А вообще (-1) это округленное при выводе на консоль значение kub.. А тот прибавок exp(log(x))=x Ваш компилятор в отличии от моего просто игнорирует (напечатав ошибку ранее)...
У меня был случай когда я использовал тип float а не double и в какой-то момент из-за не хватки точности происходило округление числа до 0 и как следствие вылезало деление 0. Но при этом компилятор не считал это ошибкой а просто выдавал какой-то мусор....
Chernobyl
211 / 211 / 67
Регистрация: 30.09.2012
Сообщений: 526
08.02.2014, 11:16     Log Domain error #6
Dragwor, Переменная kub это же единица в кубе, то есть всегда единица. ln(-x) это уже комплексное число и обычная функция log() с math.h не решает такого, а выдаёт ошибки. Вообще говоря exp(ln(-x)) = -x, но это для людей так, а машина е возводит в степень ln(-x), а ln(-x), как я писал не вычисляется правильно, поетому на этом этапе выступает ошибка.
Очень похоже, что ваш компилятор отбрасывает эту вещь и выводит на печать ошибку, а потом уже переменную kub, которая всегда равна единице. Хотя у меня тоже пишет -1.#IND.
Yandex
Объявления
08.02.2014, 11:16     Log Domain error
Ответ Создать тему
Опции темы

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