私は Fortran 2008 を初めて使用し、Sieve of Atkin を実装しようとしています。C++ では、これを a を使用して実装しましたstd::bitset
が、Fortran 2008 ではこの目的を果たすものを見つけることができませんでした。
誰かがコード例を教えてくれたり、実装戦略を説明したりできますか?
私は Fortran 2008 を初めて使用し、Sieve of Atkin を実装しようとしています。C++ では、これを a を使用して実装しましたstd::bitset
が、Fortran 2008 ではこの目的を果たすものを見つけることができませんでした。
誰かがコード例を教えてくれたり、実装戦略を説明したりできますか?
標準 Fortran には、私が理解しているものの正確な類似物はありませんstd:bitset
。ただし、私の理解に欠陥がある可能性があることは認めます。一般に、標準の Fortran に固執する場合は、整数をビットのセットとして使用します。1 つの整数では目的に十分なビットがない場合は、整数の配列を使用します。ただし、これは、たとえばビットセットの 307 番目のビットがどこにあるかを追跡する責任があなたにあることを意味します。
2008 規格より前は、ビット操作用bit_size
に 、iand
、などの関数があります (言語リファレンスについては、コンパイラのドキュメントまたは Google を参照するか、Intel Fortran のドキュメントを参照してください)。ibset
btest
Fortran のリテラルに慣れていない場合はboz
、よく理解してください。たとえば、次のようなステートメントを使用して整数のビットを設定できます
integer :: mybits
...
mybits = b'00000011000000100000000000001111'
を使用するb edit descriptor
と、バイナリ リテラルも読み書きできます。たとえば、ステートメント
write(*,*) mybits
write(*,'(b32.32)') mybits
出力が生成されます
50462735
00000011000000100000000000001111
十分に最新のコンパイラを手に入れることができれば、2008 年の標準には、 、bge
などbgt
の新しいビット操作関数が追加されていることがわかります。これらは、整数配列または整数である入力引数に対して定義されていますが、それらを使用して渡す経験はありません。dshiftl
iall
始めるにはこれで十分です。