Variable size/Set: Difference between revisions

added Fortran
(omit from Unlambda)
(added Fortran)
Line 39:
<lang d>struct Empty { }
writefln(Empty.sizeof) ; // print 1</lang>
 
=={{header|Fortran}}==
 
Since Fortran 90 each intrinsic data type (INTEGER, REAL, COMPLEX, LOGICAL and CHARACTER) has a KIND parameter associated with it that can be used to set the required level of precision. The actual values which these KIND parameters can take are not specified in the standard and are implementation-dependent. In order to select an appropriate KIND value that is portable over different platforms we can use the intrinsic functions SELECTED_REAL_KIND and SELECTED_INT_KIND.
 
The syntax of these functions are as follows:-
 
'''selected_real_kind(P, R)''', where P is the required number of significant decimal digits and R is the required decimal exponent range. At least one argument must be present. The return value is the kind type parameter for real values with the given precision and/or range. A value of -1 is returned if P is out of range, a value of -2 is returned if R is out of range and a value of -3 is returned if both P and R are out of range.
 
'''selected_int_kind(R)''', where R is the required decimal exponent range. The return value is the kind type parameter for integer values n such that -10^R < n < 10^R. A value of -1 is returned if R is out of range.
 
<lang fortran>program setsize
implicit none
 
integer, parameter :: p1 = 6
integer, parameter :: p2 = 12
integer, parameter :: r1 = 30
integer, parameter :: r2 = 1000
integer, parameter :: r3 = 2
integer, parameter :: r4 = 4
integer, parameter :: r5 = 8
integer, parameter :: r6 = 16
integer, parameter :: rprec1 = selected_real_kind(p1, r1)
integer, parameter :: rprec2 = selected_real_kind(p2, r1)
integer, parameter :: rprec3 = selected_real_kind(p2, r2)
integer, parameter :: iprec1 = selected_int_kind(r3)
integer, parameter :: iprec2 = selected_int_kind(r4)
integer, parameter :: iprec3 = selected_int_kind(r5)
integer, parameter :: iprec4 = selected_int_kind(r6)
real(rprec1) :: n1
real(rprec2) :: n2
real(rprec3) :: n3
integer(iprec1) :: n4
integer(iprec2) :: n5
integer(iprec3) :: n6
integer(iprec4) :: n7
character(30) :: form
form = "(a7, i11, i10, i6, i9, i8)"
write(*, "(a)") "KIND NAME KIND NUMBER PRECISION RANGE "
write(*, "(a)") " min set min set"
write(*, "(a)") "______________________________________________________"
write(*, form) "rprec1", kind(n1), p1, precision(n1), r1, range(n1)
write(*, form) "rprec2", kind(n2), p2, precision(n2), r1, range(n2)
write(*, form) "rprec3", kind(n3), p2, precision(n3), r2, range(n3)
write(*,*)
form = "(a7, i11, i25, i8)"
write(*, form) "iprec1", kind(n4), r3, range(n4)
write(*, form) "iprec2", kind(n5), r4, range(n5)
write(*, form) "iprec3", kind(n6), r5, range(n6)
write(*, form) "iprec4", kind(n7), r6, range(n7)
 
end program</lang>
Output
<pre>KIND NAME KIND NUMBER PRECISION RANGE
min set min set
______________________________________________________
rprec1 1 6 6 30 37
rprec2 2 12 15 30 307
rprec3 3 12 18 1000 4931
iprec1 1 2 2
iprec2 2 4 4
iprec3 3 8 9
iprec4 4 16 18</pre>
 
=={{header|J}}==
179

edits