Rubyinline对具有浮点值的数组元素求和

时间:2012-01-14 09:08:40

标签: c ruby

我试图用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

1 个答案:

答案 0 :(得分:2)

x是您的C代码中的int。如果您不希望float的结果被截断,请将其更改为double(或NUM2DBL

或者完全废除那个临时的并写下:

sum += NUM2DBL(c_arr[i]);