2012-01-14 23 views
0

我想用RubyInline(红宝石1.9.2)在C中添加一个红宝石数组的浮点值。预期产出应该是浮动价值。这里是我的代码:Rubyinline sum数组元素与浮点值

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

回答

2

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

或者废除该临时干脆写:

sum += NUM2DBL(c_arr[i]); 
+0

我不能相信我忽略了这个。我猜,上床时间了。谢谢 – vald 2012-01-14 09:47:00