見慣れない現象が起こっています。
簡単に言うと、ある値が 0 なのかどうか( というよりは十分小さいかどうか...? )が簡単には分からなくなる現象です。
下のスクリプトを実行すると分かると思いますが、変数Bに代入されている数値が、見かけ上0になっているのに、
それが0かどうかをチェックしようとすると「0でない」と言われてしまいます。
mes "B = 1.0*cos(m_pi/2.0)"
B = 1.0*cos(m_pi/2.0)
mes "B = "+B+""
if B = 0.0 : mes "w"
if B = -0.0 : mes "w"
mes "嗚呼...、 2.0/B = "+str(2.0/B)+""
if double(str(B)) = 0 : mes "Bは本当は0だと思います。"
if B > 0 : mes "ですが、Bは0よりほんの少し大きいらしいです。"
H = B + 1.0 : if H = 1.0 : mes "ですが、 B+1.0 は 1.0 だそうです。";Bに何かを足すと、結果は上手く認識できる。
;が、いつもそうとは限らない。とあるモジュール内で同じ事をやったら何故かダメだった。
if B + 1.0 - 1.0 = 0.0 : mes "また、B+1.0-1.0 は 0.0 だそうです。"
mes ""
Y = 1.0*sin(m_pi/2.0)
if Y = 1.0 : mes "1.0*sin(m_pi/2.0) = 1.000000 はちゃんと分かっているそうです"
このBの値を出現させるのに苦労しました。もうひとつ、-0.000000となって同様の現象が起こっている
スクリプトがあるのですが、原因箇所が分からない上にサイズが大きすぎて載せられません。
上記現象に今、非常に困っております。
というのも、空間ベクトルを扱うための計算用モジュール群を作っていて、わりと頻繁に「理論上はキッカリ0」
な数値が現れるので、その度にこの問題にはまって計算がおかしくなって、やりきれません。
今のところ、double(str(ターゲット)) としてとりあえずifによる0判定をクリアしています。
しかしこれだと無駄な計算コストがかっています。ループするとなると遅延が無視できないのです。
何か解決法を教えていただけないでしょうか?