Powiedz, mam następujący program:poprawić precyzję w zmiennych zdefiniowanych przez całkowitą ilorazu
program derp
implicit none
integer, parameter :: ikind = selected_real_kind(18)
real (kind = ikind) :: a = 2.0/3.0
print*, a
end program derp
programu derp
wyjścia 0.6666666865348815917
, który nie jest wyraźnie 18 cyfr precyzji. Jeśli jednak zdefiniuję a=2.0
i b=3.0
przy użyciu tej samej metody i , wówczas zdefiniuj c=a/b
otrzymam wynik o wartości 0.666666666666666666685
, co jest dobre. Jak mogę po prostu zdefiniować zmienną jako iloraz liczb całkowitych i czy przechowuję wszystkie cyfry precyzji, które chcę od selected_real_kind
?
Doskonale, dzięki. To trochę kiepskie, że musisz to zrobić ręcznie, ale mogę z tym żyć. –
Podstawową rzeczą w Fortranie jest to, że RHS jest oceniane bez uwzględnienia LHS, a następnie przypisane. Jest więcej sytuacji, w których jest to kluczowe. –
Ocena RHS bez względu na precyzję LHS nie jest niczym wyjątkowym dla fortranu. Jeśli wykonasz a = 2/3, spodziewałbyś się operacji na float (być może chodziło o arytmetykę intergerów). To, co jest wyjątkowe (być może) dla fortranu, jest domyślne dla pojedynczej precyzji. Na zły nie ma standardowego sposobu ustawienia domyślnego. – agentp