daisukedemos / redsvd

Automatically exported from code.google.com/p/redsvd
0 stars 0 forks source link

rand()が0を返す場合、 sampleTwoGaussian(float&,float&)の結果が-infとなり計算結果がおかしくなる #1

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
問題
cygwin/gcc3.4.4 
環境下でビルドしたredsvd0.1.2において、計算結果がnanになる

原因
 sampleTwoGaussian(float&,float&): redsvd.cppにおいて、

  float v1 = (float)(rand()) / ((float)RAND_MAX+1);
  float v2 = (float)(rand()) / ((float)RAND_MAX+1);
  float len = sqrt(-2.f * log(v1));

というコードがある。rand()の値域は0を含むが、v1に0が設定�
��れた場合lenがinfとなり以降の値がおかしくなる。

当該環境においては、srand()されていない場合、rand()を一回�
��に呼んだ時の初期値がかならず0となるため、常時計算結��
�がおかしくなることになる。

解決方法
rand()が0を返す場合を考慮する。
知識不足でパッチは書けませんでした。

以上よろしくお願いします。

Original issue reported on code.google.com by discommu...@gmail.com on 15 Nov 2010 at 6:48

GoogleCodeExporter commented 9 years ago
こちら0より大きい値で1未満が返すように変更いたしました
。(version 0.1.3より)

Original comment by Daisuke.Okanohara on 12 Apr 2011 at 5:38