Return-Path: Received: from mail-ee0-f41.google.com ([74.125.83.41] verified) by media-motion.tv (CommuniGate Pro SMTP 4.2.10) with ESMTP-TLS id 5002701 for AE-List@media-motion.tv; Thu, 14 Mar 2013 02:53:23 +0100 Received: by mail-ee0-f41.google.com with SMTP id c13so799951eek.0 for ; Wed, 13 Mar 2013 19:00:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:mime-version:in-reply-to:references:from:date:message-id :subject:to:content-type; bh=h78p+arguc/3noEHglA7UxKWvigWkxzEZb1PFAXaPA0=; b=cglQX/CrIlOL+UOvGN8du6tepuyou0S/x8nHSdyLrwIyCGz3Ih/5Y+X1l+J0Ypyplh rK58DhjmJSwBPL9JHpswLMWLAeU4naHZRlO7jlaIN8hyMugTb/vYRGmHJ+HYojrlWXyE N1qvJJSaBgyTlKAJ9dVNATshpEAk9UpDH9mXL6qnKoC7J+Hq2e+R/XEl1oJtcAtBBNCI p82h95sFY2VIjZh8CGMZI33H+EW2VrP9n+Nh4ht5luccqlmvoie2nk4pSuXBqDKk+Yc/ Ki2R0Uwehcc1pkQnwkeXMHDXldrT0sWnoVBKInoUNYgDeYcwraGme6hpdkQDlQUg/U2J Uh0A== X-Received: by 10.14.0.73 with SMTP id 49mr1720673eea.21.1363226425503; Wed, 13 Mar 2013 19:00:25 -0700 (PDT) MIME-Version: 1.0 Received: by 10.223.41.13 with HTTP; Wed, 13 Mar 2013 19:00:05 -0700 (PDT) In-Reply-To: References: From: Bruce Wainer Date: Wed, 13 Mar 2013 22:00:05 -0400 Message-ID: Subject: Re: [AE] Divide by Zero Errors... To: After Effects Mail List Content-Type: multipart/alternative; boundary=047d7b60525ed7559d04d7d8e224 --047d7b60525ed7559d04d7d8e224 Content-Type: text/plain; charset=ISO-8859-1 Andrew, The only thing I can think of is that the Math.exp() method is returning 0 or infinity when a large number is passed in. So if e^(decay*t) is too large of a number, the result becomes 0 or infinity (not sure which it would be but either way division would be impossible). With exponents this is really easy to do, as the numbers get very large very quickly. Just to test, if you replace the "Math.exp(decay*t)" with something else, do the errors go away? If so you've found the problem code. I think it has to be though because it's the only divisor that is variable. The only solution would be to protect that code by creating a variable to hold that result. If it is 0 or infinity, reassign that variable to a very very large number (preferably the maximum value that the datatype can hold). Sorry for using general programming terms, I've done much more Java, PHP, and SQL lately than Javascript (which the After Effects expression engine is based on). Oh the joys of being a Media Arts and Telecommunications dual major. Bruce Wainer On Wed, Mar 13, 2013 at 8:55 PM, Andrew Embury wrote: > Hey guys/ gals! > > Quick question.... > > Whilst animating in AE tonight I was using the following expression: > > amp = .03; > freq = 4.0; > decay = 12.0; > n = 0; > if (numKeys > 0){ > n = nearestKey(time).index; > if (key(n).time > time){ > n--; > }} > if (n == 0){ t = 0; > }else{ > t = time - key(n).time; > } > if (n > 0){ > v = velocityAtTime(key(n).time - thisComp.frameDuration/10); > value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t); > }else{value} > > > Never ever have I since have encountered so many "Divide by Zero" errors > in my life with AE. > > Currently working with CS6 and I am applying this expression to Scale, > Position, and Rotation. > > Any help would be greatly appreciated. > > Thank you. > > - Andrew > --047d7b60525ed7559d04d7d8e224 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
Andrew,

The only thing I can think of is that = the Math.exp() method is returning 0 or infinity when a large number is pas= sed in. So if e^(decay*t) is too large of a number, the result becomes 0 or= infinity (not sure which it would be but either way division would be impo= ssible). With exponents this is really easy to do, as the numbers get very = large very quickly.

Just to test, if you replace the "Math.exp(decay*t)" with som= ething else, do the errors go away? If so you've found the problem code= . I think it has to be though because it's the only divisor that is var= iable. The only solution would be to protect that code by creating a variab= le to hold that result. If it is 0 or infinity, reassign that variable to a= very very large number (preferably the maximum value that the datatype can= hold).

Sorry for using general programming terms, I've done much mor= e Java, PHP, and SQL lately than Javascript (which the After Effects expres= sion engine is based on). Oh the joys of being a Media Arts and Telecommuni= cations dual major.

Bruce Wainer


On Wed, Mar 13, 2013 at 8:55 = PM, Andrew Embury <aembury@gmail.com> wrote:
Hey guys/ gals!

Quick question....

Whilst animating in AE = tonight I was using the following expression:

amp =3D .03;
freq =3D 4.0;
decay =3D 12.0;
n = =3D 0;
if (numKeys > 0){
n =3D nearestKey(time).inde= x;
if (key(n).time > time){
n--;
}}
<= div>if (n =3D=3D 0){ t =3D 0;
}else{
t =3D time - key(n).time;
}
if (n= > 0){
v =3D velocityAtTime(key(n).time - thisComp.frameDurati= on/10);
value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t= );
}else{value}


Never ever have I= since have encountered so many "Divide by Zero" errors in my lif= e with AE.

Currently working with CS6 and I am app= lying this expression to Scale, Position, and Rotation.

Any help would be greatly appreciated.

Thank you.

- Andrew

--047d7b60525ed7559d04d7d8e224--