実行環境は、
・Windows10
・Python3.7.3
・Cython0.29.6
AnacondaでインストールしたJupyter-Notebook上で実行
PythonでできてCythonでできなかった表記①
N**(-n)は使えない (nは1以上の整数)
Pythonでいう
a = 10**(-2) # a == 0.01 b = 10**(-5) # b == 0.00001
をCythonで実行しようとして
cdef double a = 10**(-2) # a == 0.0 cdef double b b = 10**(-5) # b == 0.0
のように書いたところ、a, b ともに0.0が代入されている。どうやら
10**(-n) という書き方を、Cythonは受け付けてくれないらしい。
つまり、こう書けということ。
cdef double c = 0.01, d # c == 0.01 d = 0.00001 # d == 0.00001
0であってはならない変数が0だったら、これを疑うのもアリ。自分はこれに気づかず、whileの無限ループにはまりました。
PythonでできてCythonでできなかった表記②
X, Y = A, B は使えない
Pythonでいう
x, y, z = 0, 0, 0 # x == y == z == 0
をCythonで書こうとして、
cdef double x, y, z x, y, z = 0.0, 0.0, 0.0 # コンパイルエラーが発生。 もちろん、int でもダメ。
とすると、コンパイルエラーが発生。C/C++でこういうタプルな書き方は、(少なくとも自分の知識の範囲では)できないから、そういうことと関係するのかもしれないと思う。
改めて書くまでもないかもしれないが、正しくは
cdef double x = 0.0, y = 0.0, z = 0.0 # x == 0.0, y == 0.0, z == 0.0
のように書けばよい。
なお、Cythonでタプルを扱うことは可能らしい。少し調べてみたところ、慣れてないと難しい書き方のようだ。
今回は以上。それではまたいつか。