[chuck-users] CurveTable strange behaviour
dan trueman
dtrueman at Princeton.EDU
Thu Aug 23 13:57:45 EDT 2007
i agree this is mysterious. the "size" message is a mistake just in
the fprintf line, so it can be ignored. we're looking at the rest of
the problem...
dt
On Aug 22, 2007, at 1:24 PM, eduard wrote:
> The following patch shows either a misbehaviour or a misuse of
> CurveTable, dunno. Two different functions
> (rand_coefs1 and rand_coefs2) are used to assign coefficients to
> CurveTable.coefs(). While the first seems to do the job alright, the
> latter
> doesn't and throws the following error message:
> [chuck](via CurveTable): usage:
> size, time1, value1, curvature1, [ timeN-1, valueN-1,
> curvatureN-1, ] timeN, valueN)
>
> Maybe I'm doing something wrong that | don't see, but can't
> understand why this happens. Could anyone explain?
> Also, don't understand why the error message tells me the size needs
> to be supplied. The examples say that coefs are arrays of the type
> [time1, value1, curvature1, ..., timeN-1, valueN-1, curvatureN-1,
> timeN, valueN] and Gen's size, if I'm not mistaken, is hard coded as
> 4096.
>
> Thanks in advance,
>
> eduard
>
>
> The patch:
>
>
> fun void rand_coefs1( CurveTable table )
> {
> [-1, 0, 1 ] @=> int curvature[];
> [0., 0., curvature[ Std.rand2(0, 2)],
> 1, Std.rand2f(.5,1.), curvature[ Std.rand2(0, 2)],
> 2, Std.rand2f(.5,1.), curvature[ Std.rand2(0, 2)],
> 3, Std.rand2f(0.,1.), curvature[ Std.rand2(0, 2)],
> 4, Std.rand2f(0.,1.), curvature[ Std.rand2(0, 2)],
> 5, Std.rand2f(0.,1.), curvature[ Std.rand2(0, 2)],
> 6, Std.rand2f(0.,1.), curvature[ Std.rand2(0, 2)],
> 7, Std.rand2f(0.,1.), curvature[ Std.rand2(0, 2)],
> 8, Std.rand2f(0.,1.), curvature[ Std.rand2(0, 2)],
> 9, 0] @=> float coefs[];
> coefs => table.coefs;
>
> <<<"\n", "CURVE 1:\n" >>>;
> <<<"\t index", " value", " curvature">>>;
> <<<"\t----------------------------------","\t">>>;
> for( 0 => int i; i < 8; i++ )
> <<<"\t",coefs[i++], coefs[i++], coefs[i]>>>;
> <<<"\t", coefs[8], coefs[9] >>>;
> <<<"\t----------------------------------","\t">>>;
> }
>
> fun void rand_coefs2( CurveTable table, int n_breakpoints )
> {
> // this function does not assign values stored in coefs
> correctly to
> // CurveTable.coefs(). Why? It also throws an error message.
>
> [-1, 0, 1 ] @=> int curvature[];
> n_breakpoints*3 - 1 => n_breakpoints;
> float coefs[ n_breakpoints];
> 0. => coefs[0];
> 0. => coefs[1];
> for( 2 => int i; i < n_breakpoints; i++ )
> {
> curvature[ Std.rand2(0, 2)] => coefs[i++];
> i/3 => coefs[i++];
> Std.rand2f(0.,1.) => coefs[i];
> }
> 0 => coefs[n_breakpoints-1];
> coefs => table.coefs;
>
> <<<"\n", "CURVE 2:\n" >>>;
> <<<"\t index", " value", " curvature">>>;
> <<<"\t----------------------------------","\t">>>;
> for( 0 => int i; i < n_breakpoints-2; i++ )
> <<<"\t", coefs[i++], coefs[i++], coefs[i]>>>;
> <<< "\t", coefs[n_breakpoints-2], coefs[n_breakpoints-1] >>>;
> <<<"\t----------------------------------","\t">>>;
> }
>
> CurveTable curve1;
> CurveTable curve2;
> 1024 => int size;
>
> <<< "\n*Assigning coefs via rand_coefs1()","\t">>>;
> rand_coefs1( curve1 );
> 0 => float sum;
> for( 0 => int i; i < size; i++ )
> {
> curve1.lookup(i) +=> sum;
> }
> if( sum > 0 ) <<<"Ok", "sum[i=0,N=1023] =", sum>>>;
> else <<< "Error:", "sum[i=0,N=1023] =", sum, ". Coefs were not
> assigned. All values are 0." >>>;
>
> <<< "\n*Assigning coefs via rand_coefs2()","\t">>>;
> rand_coefs2( curve2, 10 );
> 0 => sum;
> for( 0 => int i; i < size; i++ )
> {
> curve2.lookup(i) +=> sum;
> }
> if( sum > 0 ) <<<"Ok", "sum[i=0,N=1023] =", sum>>>;
> else <<< "Error:", "sum[i=0,N=1023] =", sum, ". Coefs were not
> assigned. All values are 0.\n">>>;
> _______________________________________________
> chuck-users mailing list
> chuck-users at lists.cs.princeton.edu
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
More information about the chuck-users
mailing list