|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
23.09.2017, 15:57 | #1 |
Пользователь
Регистрация: 23.09.2017
Сообщений: 17
|
Паскаль.Почему условие не срабатывает?
Добрый день! Нужна ваша помощь. По л/р на Pascal написал прогу.
Код:
Мне самому не нравится, как выглядит эта строка, но я не нашел подходящее исключение, чтобы вместо вывода NaN на экран выводить текст. А он выводится в результате вычисления (power (x,0.1*x)) при отрицательном дробном Х. ________ Код нужно оформлять по правилам: тегом [CODE]..[/СODE] (это кнопочка на панели форматирования с решёточкой #) Не забывайте об этом! Модератор. Последний раз редактировалось Serge_Bliznykov; 23.09.2017 в 21:16. |
23.09.2017, 21:21 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
вещественные числа НЕЛЬЗЯ сравнивать на совпадение.
(т.е. нельзя для них использовать операции =, <=, >= ) Это особенности машинного представления вещественных (дробных) чисел. почему так - смотрите, например, в темах на форуме: http://www.programmersforum.ru/showp...05&postcount=9 http://www.programmersforum.ru/showthread.php?t=307730 http://programmersforum.ru/showthread.php?p=1281382 вот, попробуйте заменить строчку на такую: Код:
может быть, стоит делать наоборот - проверять область допустимых значений и только если функция определена, тогда вычислять её? Последний раз редактировалось Serge_Bliznykov; 23.09.2017 в 21:26. |
24.09.2017, 15:55 | #3 |
Пользователь
Регистрация: 23.09.2017
Сообщений: 17
|
Спасибо. Условие сработало, но теперь при значении переменной -8,8 программа выводит ответ NaN, хотя калькулятор говорит, что значение есть (0,147521...). Не понимаю, в чём дело.
Значение -8,8 рассчитывается вот этой функцией: if x<-8 then y:=cos(x)/cos(x) + (power (x,x/10)); Калькулятор её считает нормально, паскаль выводит NaN. Кто прав? |
24.09.2017, 16:07 | #4 |
2 the Nation Glory
Старожил
Регистрация: 27.05.2014
Сообщений: 3,289
|
offtop
Код:
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы. |
24.09.2017, 16:24 | #5 |
Пользователь
Регистрация: 23.09.2017
Сообщений: 17
|
согласен ) . Была формула такая дана.
if x<-8 then y:= 1 + (power (x,0.1*x)); Паскаль выдает: x=-8.8 y=NaN |
24.09.2017, 16:44 | #6 |
Пользователь
Регистрация: 23.09.2017
Сообщений: 17
|
хотя -8.8^-0.88 считается на калькуляторе вполне: 0,14752147583696697713276877352338
|
24.09.2017, 17:53 | #7 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Возведение в действительную степень не определено для отрицательных чисел. А power в данном случае считает его действительным и вычисляет как Exp(-0.88 * Ln(-8.8)). Чему равен логарифм от -8.8? То-то и оно. А если показатель степени считать рациональным, то нет проблем - корень 100 степени из (-8.8)^88 ну и обратить - все ok, что и посчитал калькулятор. Умней чем паскаль на компьютере )) По идее калькулятор должен сдохнуть, если предложить посчитать -8.8^-0.87, разве что с комплексными умеет работать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 24.09.2017 в 17:57. |
24.09.2017, 22:38 | #8 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
|
24.09.2017, 23:52 | #9 | |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
Цитата:
А логарифм от отрицательных чисел вполне вычисляем - но только на множестве комплексных чисел. Если что, ОБЩАЯ ФОРМУЛА вычисления логарифма записывается так: Ln(z) = ln(|z|) + i*arg(z). У положительных действительных чисел аргумент равен нулю, поэтому мнимой части у результата нет. По такой формуле можно вычистить логарифм любого, отличного нуля, комплексного числа. Действительные числа также являются комплексными. Но ни в одном из известных мне ЯП логарифм отрицательного числа нигде не давал комплексного результата - в лучшем случае - это NaN, в худшем - ошибка Invalid floating point operation. Встроенный ЯП в MathCAD - исключение - он вычисляет логарифм на множестве комплексных чисел. Последний раз редактировалось Вадим Мошев; 24.09.2017 в 23:58. |
|
25.09.2017, 15:42 | #10 |
Пользователь
Регистрация: 23.09.2017
Сообщений: 17
|
Т.е. нет программного решения? Если есть, то как в программе описать, я не понял, извините...
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Паскаль! Как сделать условие: чем дальше планеты от солнца, тем медленнее они крутятся? Почему Луна немного косит? | Jenee | Помощь студентам | 3 | 16.04.2017 09:09 |
Что-то не срабатывает в коде: Почему не происходит пропорциональное масштабирование DIV'а | ne4Euusmvyo | HTML и CSS | 2 | 15.02.2017 20:37 |
Почему не срабатывает preg_replace? | Karyuudo | Помощь студентам | 3 | 20.09.2015 01:16 |
Не срабатывает условие сравнения чисел. | Solvinder | Помощь студентам | 1 | 28.04.2011 23:01 |
Условие не срабатывает | segail | Microsoft Office Excel | 5 | 15.08.2010 15:10 |