On Sat, Nov 26, 2011 at 11:29 AM, m l <[email protected]> wrote:
>
> I`m a beginner in J programming.
> I need writing a simple function:
>
> round ( x * sqrt (x*y))
>
> Thanks in advance.
>
> Matxin
>
>
Among the gazillion ways to do this:
f =: [: <.0.5+ {. * %:@*/
f 15 30
318
------
1. If you have a list of two numbers: x,y, you multiply them with `*/`:
*/ 15 30
450
2. You then take the square root (`%:`) of (`@`) that:
(%: @ */) 15 30
21.2132
3. and multiply that by the first term of your list (`{.`)
({. * (%: @ */)) 15 30
318.198
4. You then "apply" (`[:`) rounding (`<.0.5+`) to that:
([: <.0.5+ {. * (%:@*/)) 15 30
318
Note that the construct in step 3 is a train of 3 verbs (see:
http://www.jsoftware.com/help/learning/09.htm).
(f g h) y == (f y) g (h y)
where
y = 15 30
f = {. (take first)
g = * (multiply)
h = %:@*/ (square root of product)
Also, you round a number n by taking the floor of (n + 0.5).
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm