2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Деление на ноль
Сообщение01.06.2011, 00:49 


08/03/11
186
Привет,

если в коде вычислять функцию $f(r)=\frac 1 r \cdote (1-\exp(-r^2))$ в нуле то получится, что мы делим на ноль. Если посчитать предел этой функции в нуле, то получим ноль. Вопрос такой, как лучше запрограммировать такой случай?
У меня два предложения есть. Можно сделать условный цикл,

Код:
if(r==0)
   f(r)=0
else
   f(r)=...
end if


Другой вариант, это всегда переопределять $ r=r+\delta$ , а дельта выбрать маленьким (например, 1.E-40, получается ноль).
Как думаете, что лучше? Может еще способы есть?

 Профиль  
                  
 
 Re: Деление на ноль
Сообщение01.06.2011, 07:01 
Аватара пользователя


05/01/10
513
Владивосток
Я делал как вы, т.е. условие на случай неопределённости.

 Профиль  
                  
 
 Re: Деление на ноль
Сообщение01.06.2011, 14:13 
Заслуженный участник


15/05/05
3445
USA
sithif в сообщении #452488 писал(а):
Может еще способы есть?

Например (r >= 0):
Код:
if(r < 1.0e-10) // подобрать нужное значение константы
   f(r)=0
else
   f(r)=...
end if
В арифметике с плавающей точкой ставнение $x==x_0$ не рекомендуется. Надежнее использовать что-то вроде $abs (x - x_0) \le \epsilon$

 Профиль  
                  
 
 Re: Деление на ноль
Сообщение01.06.2011, 16:40 
Заслуженный участник


04/05/09
4587
А ещё лучше для маленьких $r$ перейти на ряд Тейлора, т.к. выражение $1-\exp(-r^2)$ будет очень неточным.

 Профиль  
                  
 
 Re: Деление на ноль
Сообщение01.06.2011, 19:11 


08/03/11
186
Спасибо за советы!

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group