2012-01-14 5 views
0

Я пытаюсь добавить значения float массива ruby ​​в C с RubyInline (ruby 1.9.2). Ожидаемый результат должен быть значением поплавка. Вот мой код:Элементы массива сумм Rubyinline с поплавковыми значениями

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. Измените это на float (или double), если вы не хотите, чтобы результат NUM2DBL был усечен.

Или покончить с этим временным вообще и пишут:

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

Я не могу поверить, что я не заметил этого. Полагаю, время ложиться спать. Спасибо – vald

Смежные вопросы