Anaconda 学習:整数の除算には要注意

2018-01-26 :  PCクリニック
今年初め(2018-01-03)の記事「GSL Shell から、Python に
  訳あって、GSL Shell から足を洗う?ことになった。
  ・・・・・
  ・・・・・
の如くで、

以前の記事:
例えば「GSL Shell/OpenCV 学習:cvFitEllipse2
  このところ、Python プログラムを“GSL Shell”に移植している。

とは逆に、

GSL Shell プログラムを“Anaconda”:Python に移植している。


ここで、
原因がなかなか判からなかった事態に陥った。

元の GSL Shell のコードは:
C = matrix.vec { 0, 0.2, 0.4, 0.6, 0.8, 1.0 }  --  一例
N = #C
F = matrix.new( N, 1 )

for n=1,N do
F[n] = C[n] * 2^n / math.sqrt(math.pi) * sf.gamma(n/2+1) / sf.gamma((n+1)/2)
end
の様なもの

なので、Python では、
ほぼそのまま、右から左に変換した:
# -*- coding: utf-8 -*-
import math
import numpy as np
import scipy.special as sf

C = np.array( [ 0, 0.2, 0.4, 0.6, 0.8, 1.0 ] )
N = len(C)
F = np.zeros( N )

for n in range(N):
F[n] = C[n] * 2**(n+1) / math.sqrt(math.pi) * sf.gamma((n+1)/2+1) / sf.gamma((n+2)/2)
と云った感じ。

だが、結果が一致しない???


可成り悩んだが、

原因がやっと判明した。

最後の for 文は、
for n in range(N):
F[n] = C[n] * 2**(n+1) / math.sqrt(math.pi) * sf.gamma((n+1)/2.+1) / sf.gamma((n+2)/2.)
とすべきだった。

何処が問題?

整数除算の結果は整数と云うこと!!!


つまり、for の変数 n は整数なので、

÷2 じゃなくて、÷2.とすべし!


本日はここまで。


Anaconda ( Python ) 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


180109F
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
04 | 2018/05 | 06
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク