On 2016-10-17 09:53, Emmanuel Charpentier wrote:

I need to use a fast random (complex) number generatot.## Advertising

The following : sage: %%cython ....: from sage.misc.prandom import random ....: cpdef complex crand(double x): ....: return x*random()+x*1j*random() is about 77 times faster than its Python equivalent : sage: def prand(x): ....: return CDF(2*(x*(random()-0.5)+I*x*(random()-0.5))) sage: %timeit foo=crand(8) The slowest run took 14.72 times longer than the fastest. This could mean that an intermediate result is being cached. 1000000 loops, best of 3: 810 ns per loop sage: 623000.0/810.0 769.135802469136 sage: No small beer... However : sage: prand(8).parent() Complex Double Field sage: crand(8).parent() --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-112-473e92fbb9eb> in <module>() ----> 1 crand(Integer(8)).parent() AttributeError: 'complex' object has no attribute 'parent' Is there a way to return a CDF (or RDF) value from a Cython function ?

1. Exactly the same way you would do it for a Python function: CDF(x)

`2. If you want an even faster way, you need to use ComplexDoubleElement`

`internals: create the object with`

`ComplexDoubleElement.__new__(ComplexDoubleElement) and then manually set`

`the _complex attribute.`

-- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-support+unsubscr...@googlegroups.com. To post to this group, send email to sage-support@googlegroups.com. Visit this group at https://groups.google.com/group/sage-support. For more options, visit https://groups.google.com/d/optout.