我正在尝试在 Fortran 中编写一个函数,它将最终确定一个整数是否是 2 的幂。此代码在 2^28 范围内有效,但在 2^29 范围内失败:
real(kind(1.q0)) elemental function fractional_part(x)
real(kind(1.q0)), intent(in) :: x
fractional_part = x-floor(x)
end function fractional_part
program frac
implicit none
real(kind(1.q0)) :: fractional_part
integer :: ii
logical :: pof2
read(5,*) ii
pof2 = (fractional_part(log(real(ii,16))/log(2.q0)) == 0.0q0)
if(pof2) write(6,*) ii
end
Run Code Online (Sandbox Code Playgroud)
不幸的是,它依赖于整数到实数(16)的转换以及势必有噪声的对数函数。
fortran ×1