AEエンジョイ勢

主にAfterEffectsの話をします

AE Scripting①<生成マーカーの誤差な話>

まずこちらをご覧下さい。

f:id:mitsuji3244:20151128172543p:plain

これを使って手動で追加した「20696f」のマーカーを「フレーム数取得」した状態です。

ここまでは良いんですが…。

f:id:mitsuji3244:20151128173233p:plain

「マーカー適用」→再度「フレーム数取得」を行った状態。

1行目に小数点以下でズレた変な値が取得されています。

やっべ、バグだ!と思ったので早速修正作業に入ったんですがこれがなかなかくせ者でして。

それについて忘れない内に覚書的な意味で書いておこうかと思います。

ただあんまりだらだら書いてもしょうがないのでズバッと行きます。忙しい人向け。

 

気づいた事まとめ

①マーカーは小数点以下の値でも置ける

上の画像だと判別できませんが、実はマーカーが2個存在しています。

「20695.9990234375f」と「20696f」にそれぞれマーカーが適用されています。

しかしこれ見た目ではわかりません。

いや厳密には微妙にズレてるんでしょうがタイムラインでそこまで拡大表示出来ないので普通気がつかない。

ドラッグしてみると隠れてるのが見えてようやくダブっている事に気が付きます。

見た目に騙されてはいけません。

いやはや、とんだ忍者ですな'`,、('∀`) '`,、

 

 

②マーカーの時間は小数点以下切り捨て

f:id:mitsuji3244:20151128174830j:plain

「20695.9990234375f」のマーカーですが、確認すると時間が「20695f」に適用されています。

他の値でも確認してみましたが切り捨てみたいですね。これは実にマズイ!

本来「20696f」にあってほしかった訳ですから。

例え1fのミスでも仕事においては致命的な事になりかねません。

はぁ~実に面倒です。でもどげんかせんといかん

 

 

③犯人は……お前だ!

(多分)javascriptの仕様です。

javascript IEEE 754 誤差」とかで検索すれば宜しいかと。

しかし仕様なら仕方ないとそのまま放置するのはマズイので考えました。

 

誤差で減って1fズレるなら足せば良いんじゃね?と。

もはや細かくは言うまい…という事で直しておきました。

 

ぶっちゃけスクリプトじゃなくてもマーカー置いた後でコンポのフレームレート変えるとたまに自然と小数点以下にズレちゃうのであんまり厳密に考えなくてもいいや、という判断です。

それがAEなんだ。無問題。大丈夫大丈夫。

 

 

…大丈夫ですよね?

大丈夫じゃなかったら誰か教えて下さい><

 

 

※151130追記※

今日偶然こんなのに出くわしたんですが。

f:id:mitsuji3244:20151130202925j:plain

正の整数でMath.floor()とparseInt()で差がでるってどういう事なんでしょうかね?

これも誤差なんだろうか…?誤差なんだろうな。メンドクサーイ!

とりあえずparseInt()なら安全っぽいのでまた直しておきました。