【发布时间】:2016-09-01 18:54:38
【问题描述】:
我正在尝试使用 NIF,但我对 Erlang 使用的数字类型感到困惑,因为我的精度有些奇怪。
这是一个例子:
erlang:band(18446744073709551614, 5) == 4
从一个看起来像这样的 NIF 内部:
long long l, r;
enif_get_long(env, argv[0], &l);
enif_get_long(env, argv[1], &r);
return enif_make_long(env, l & r);
结果我得到了1。
这与 C 层没有保持正确的数字“大小”有关吗?还是enif_(get|make)_long 不是处理这种大小的数字的正确方法?或者仅仅是 NIF 无法处理这么大的数字?
【问题讨论】:
标签: c erlang erlang-nif