3

我有一个 C 模块,我正在使用 Ruby 测试通过使用这段 C 代码扩展 ruby​​ 来测试它。正在修改 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) (正确)

下面的任何数字也是正确的。

谢谢!

4

1 回答 1

0

复制评论中的答案,以便从“未回答”过滤器中删除此问题:

我刚刚意识到,在代码中,有一个浮点类型转换导致 ruby​​ 将位数限制为 24(我猜是根据单点 IEEE754)。现在我可以使用 NUM2LL 和 LL2NUM 传递 64 位宽的数字。谢谢

〜按aalavi回答

于 2013-10-10T06:18:09.577 回答