このCコードでRubyを拡張することにより、RubyテストでテストしているCモジュールがあります。2 ** 24 -1 を超える数値は変更されています。Ruby と C の間で 64 ビット値をやり取りする必要があり、ビット精度である必要があります。任意の考えをいただければ幸いです。
in c extension:
long int sig_val;
sig_val = NUM2LL(sig) // sig is type VALUE and is ruby number to be passed on to C
. . . 私が渡したデータのいくつかの例:
- (2^34 -1) * 16 ==> C は (2^34) * 16 を受け取ります
- (2^34 +1) * 16 ==> C は (2^34) * 16 を受け取ります
- (2^24 +1) * 16 ==> C は (2^24) * 16 を受け取ります
- (2^25 -1) ==> C が (2^25) を受け取る
- (2^24 -1) ==> C が (2^24 -1) を受け取る (正解)
以下の数字も正解です。
ありがとうございました!