2

私は Fortran 2008 を初めて使用し、Sieve of Atkin を実装しようとしています。C++ では、これを a を使用して実装しましたstd::bitsetが、Fortran 2008 ではこの目的を果たすものを見つけることができませんでした。

誰かがコード例を教えてくれたり、実装戦略を説明したりできますか?

4

3 に答える 3

3

標準 Fortran には、私が理解しているものの正確な類似物はありませんstd:bitset。ただし、私の理解に欠陥がある可能性があることは認めます。一般に、標準の Fortran に固執する場合は、整数をビットのセットとして使用します。1 つの整数では目的に十分なビットがない場合は、整数の配列を使用します。ただし、これは、たとえばビットセットの 307 番目のビットがどこにあるかを追跡する責任があなたにあることを意味します。

2008 規格より前は、ビット操作用bit_sizeに 、iand、などの関数があります (言語リファレンスについては、コンパイラのドキュメントまたは Google を参照するか、Intel Fortran のドキュメントを参照してください)。ibsetbtest

Fortran のリテラルに慣れていない場合はboz、よく理解してください。たとえば、次のようなステートメントを使用して整数のビットを設定できます

integer :: mybits
...
mybits = b'00000011000000100000000000001111'

を使用するb edit descriptorと、バイナリ リテラルも読み書きできます。たとえば、ステートメント

write(*,*) mybits
write(*,'(b32.32)') mybits

出力が生成されます

    50462735
00000011000000100000000000001111

十分に最新のコンパイラを手に入れることができれば、2008 年の標準には、 、bgeなどbgtの新しいビット操作関数が追加されていることがわかります。これらは、整数配列または整数である入力引数に対して定義されていますが、それらを使用して渡す経験はありません。dshiftliall

始めるにはこれで十分です。

于 2013-01-03T17:32:52.453 に答える