Hello, Thanks for your answers ! Effectively, the code compiles with option -double but not with default option -single. I'll use -double precision waiting for the fix ! Thank you Pierre > Hi, > > Right, the compiler try to factorize a multiplication by 0 ! Another way to > see the problem it to compare : > > process= (_*cos(1/2*ma.PI)^3,_,_*cos(-1/2*ma.PI)^3); > > > and > > process= (_*cos(1/2*ma.PI)^3,_,_*cos(-1/2*ma.PI)^3) :> _; > > > in simple and double precision. > > Clearly, the factorization rule needs to be fixed > > Thanks for discovering the problem ! > > Yann > > Yann Orlarey > > Directeur scientifique > www.grame.fr > > 2016-09-24 18:33 GMT+02:00 Julius Smith <j...@ccrma.stanford.edu>: > > This looks like numerical failure in the optimization by the Faust > > compiler. You can see it approaching this situation in the following > > simplified case: > > > > process=(_*cos(ma.PI/2),_,_*cos(0-ma.PI/2)):>_; > > > > which compiles to > > > > output0[i] = (FAUSTFLOAT)(6.123234e-17f * (((1.633124e+16f * > > (float)input1[i]) + (float)input0[i]) + (float)input2[i])); > > > > Since cos(PI/2) = 0, the input coefficients are approximately 0,1,0, > > which become (numerically) eps,1,eps, where eps = 6.123234e-17f in > > this particular case. Factoring out eps gives 1/eps for the > > coefficient of input1, which became infinity in the previous example > > (numerical bug... 1/eps should possibly go to MAX_FLOAT, but not inf). > > If there were a third signal multiplied by eps, then this factoring > > would save a multiply, but in this case there are two multiplies > > either way. > > > > I would personally like to be able to set a magnitude threshold below > > which numbers are flushed to zero. Then the compiler would see > > coefficients (0,1,0) in this case and not try to factor out the 0. > > > > - Julius > > > > On Fri, Sep 23, 2016 at 7:26 AM, Stéphane Letz <l...@grame.fr> wrote: > > > The generated C++ code is incorrect (see this "(inf.0f * > > > > (float)input1[i]))) » subexpression), so probably a bug in the compiler. > > > > > Stéphane > > > > > >> Le 23 sept. 2016 à 13:28, Pierre Lecomte <pierre.leco...@gadz.org> a > > > > écrit : > > >> import("stdfaust.lib"); > > >> process=(_*cos(1/2*ma.PI)^3,_,_*cos(-1/2*ma.PI)^3):>_; > > > > > > ------------------------------------------------------------ > > > > ------------------ > > > > > _______________________________________________ > > > Faudiostream-users mailing list > > > Faudiostream-users@lists.sourceforge.net > > > https://lists.sourceforge.net/lists/listinfo/faudiostream-users > > > > -- > > Julius O. Smith III <j...@ccrma.stanford.edu> > > Professor of Music and, by courtesy, Electrical Engineering > > CCRMA, Stanford University > > http://ccrma.stanford.edu/~jos/ > > > > ------------------------------------------------------------ > > ------------------ > > _______________________________________________ > > Faudiostream-users mailing list > > Faudiostream-users@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/faudiostream-users
------------------------------------------------------------------------------ _______________________________________________ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users