Почему элементы массива форматируются как нули, когда они умножаются на 1/2 или 1/3?

#arrays #io #fortran

#массивы #io #fortran

Вопрос:

Я выписываю элементы массива следующим образом:

 write(6,'(i4,200(1x,e15.7))')Jtot0, (a*PJjv(i,Jtot0,j,iv),i=1,nenerdif,100)
  

где a — константа. Однако, когда эта константа равна 1/2 или 1/3, на выходе получаются нули, и если она равна 1, все идет хорошо. Элементы массива real*8 .

Как я могу преодолеть это, учитывая, что я обязан умножать на коэффициент 1/3?

Комментарии:

1. Вы имеете в виду 1/2 и 1/3 (которые равны нулю) или половину и треть? Пожалуйста, покажите назначение для a .

Ответ №1:

В Fortran 1/2 это операция целочисленного деления, которая в данном случае округляется до 0 . То же самое для 1/3 . Если вы хотите получить реальный результат, выполните реальную операцию деления, например 1.0/2.0 . Обратите внимание, что присвоение результата 1/2 действительной переменной установит действительную переменную на 0.0 , то есть целочисленное деление приведет к 0 , и присваивание, которое происходит затем, приведет это значение к его ближайшему реальному представлению.

Этот процесс целочисленного деления, дающий целочисленные результаты, очень распространен в языках программирования.