фотран: помогите разобраться в ошибке

Vlvovuch

Я пишу прогу на фортране (вот кусок из нее, где непонятная для меня ошибка):
do while (t<=Time)
t=t+tau
Y(1)=Ygr
Y(N+1)=Ygr
do k=1,N+1
Ys(k)=Y(k)
end do
do j=2,N+1
Y(j)=Ys(j)-r*(Ys(j)-Ys(j-1
if (t==t2) then
write (*,*) 't2=',t2
write (2,'(F5.3,F8.3)/') j*h, Y(j)
end if
if (t==t3) then
write (3,'(F5.3,F8.3)/') j*h, Y(j)
end if
if (t==t4) then
write (4,'(F5.3,F8.3)/') j*h, Y(j)
end if
end do
end do
И в итоге оказывается, что никогда не выполняются операторы в if. Хотя Time =0.75, а , t2=0.25, t3=0.5,t4=0.7.
Почему такое может быть, и в чем тут ошибка?
просто я уже голову сломала, чтобы понять, что это такое..:(

ppplva

Что такое tau ?

Vlvovuch

шаг по оси времени,
оно тоже считается, в итоге получается (например, 0.01)

ppplva

Распечатай t на каждом шаге цикла, и все станет понятно.
Вообще, числа с плавающей точкой на равенство не сравнивают.

Vlvovuch

я думала, что может какое-то несоответствие типов, но у меня все real, и когда я просту прошу выводить t на экран, он выводит, и в том числе там встречаются именно те, которые мне и нужны. Поэтому я и подвисла

Vlvovuch

может есть какой-нибудь еще способ записи в файл в нужный момент времени?

ppplva

При операциях с real может накопиться ошибка в n-ом знаке после запятой, и == не сработает. Попробуй сравнивать с точностью до какого-нибудь epsilon.

Vlvovuch

знаешь, я тут попыталась сейчас по-другому сделать:
заменить ti на целые Мi: Mi=ti/tau.
После деления Mi будут целыми? или нет?
Если да, то я вообще ничего не понимаю, так как все равно не получается, если сделать там цикл от 0 до М...

ppplva

Я фортран вообще не знаю
Если присвоить целочисленной переменной, то, конечно, будут.

Vlvovuch

я тут попробовала ввести эпсилон, он уже выводит что-то (это уже хорошо! но немного больше, чем то, что мне надо...

durka82

Сделай время типа integer.
Тем более, что оно у тебя внутри только сравнивается.
А целые нормально сравниваются.
И замени
do while (t<=Time) 
на
do t=1,Time 
, где Time тоже переведено в целое.
Оставить комментарий
Имя или ник:
Комментарий: