我试图用RubyInline(ruby 1.9.2)在C中添加ruby数组的浮点值。预期输出应为浮点值。这是我的代码:
require 'inline'
class ArrayMath
inline :C do |builder|
builder.c "
VALUE sum(VALUE arr){
int size = RARRAY_LEN(arr);
VALUE *c_arr = RARRAY_PTR(arr);
int i, x;
float sum = 0.0;
for (i=0; i<size; i++)
{
x = NUM2DBL(c_arr[i]);
sum += x;
}
return( rb_float_new(sum) );
}"
end
end
在控制台中运行
ArrayMath.new.sum([1,2.7])
输出3.0 显然,预期的结果是3.7
答案 0 :(得分:2)
x
是您的C代码中的int
。如果您不希望float
的结果被截断,请将其更改为double
(或NUM2DBL
。
或者完全废除那个临时的并写下:
sum += NUM2DBL(c_arr[i]);