2012-01-14 13 views
0

Ruby配列のfloat値をRubyInline(ruby 1.9.2)でCに追加しようとしています。期待される出力はfloat値でなければなりません。ここに私のコードは次のとおりです。コンソールでこれを実行している浮動小数点値を持つ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です。 NUM2DBLの結果が切り捨てられないようにするには、float(またはdouble)に変更します。

か、完全にその一時的に離れて行うと書き込み:

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

私はこれを見落として信じることができません。ベッドに行く時間は私が推測する。ありがとうございました – vald

関連する問題