фотран: помогите разобраться в ошибке
Что такое tau ?
оно тоже считается, в итоге получается (например, 0.01)
Вообще, числа с плавающей точкой на равенство не сравнивают.
я думала, что может какое-то несоответствие типов, но у меня все real, и когда я просту прошу выводить t на экран, он выводит, и в том числе там встречаются именно те, которые мне и нужны. Поэтому я и подвисла
может есть какой-нибудь еще способ записи в файл в нужный момент времени?
При операциях с real может накопиться ошибка в n-ом знаке после запятой, и == не сработает. Попробуй сравнивать с точностью до какого-нибудь epsilon.
заменить ti на целые Мi: Mi=ti/tau.
После деления Mi будут целыми? или нет?
Если да, то я вообще ничего не понимаю, так как все равно не получается, если сделать там цикл от 0 до М...
Если присвоить целочисленной переменной, то, конечно, будут.
я тут попробовала ввести эпсилон, он уже выводит что-то (это уже хорошо! но немного больше, чем то, что мне надо...
Тем более, что оно у тебя внутри только сравнивается.
А целые нормально сравниваются.
И замени
do while (t<=Time)на
do t=1,Time, где Time тоже переведено в целое.
Оставить комментарий
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.
Почему такое может быть, и в чем тут ошибка?
просто я уже голову сломала, чтобы понять, что это такое..:(