```On Nov 6, 2010, at 7:00 PM, flebber wrote:

> On Nov 7, 9:45 am, flebber <flebber.c... / gmail.com> wrote:
>> On Nov 7, 2:24 am, Robert Klemme <shortcut... / googlemail.com> wrote:
>>=20
>>=20
>>=20
>>=20
>>=20
>>=20
>>=20
>>=20
>>=20
>>> On 06.11.2010 10:19, flebber wrote:
>>=20
>>>> I am trying to create a class. I am struggling to figure the best =
flow
>>>> to get the maths side to work.
>>=20
>>>> So say that
>>=20
>>>> R is a float given by user input
>>>> P is a Total amount(Pool)
>>>> Per is a variable %
>>>> X is a variable that is a percentage of P defined by a maximum
>>>> allocation.
>>=20
>>>> So main =3D (( R * X)/P)*100
>>=20
>>> First of all you should get your variables right.  Variable "Per" =
does
>>> not show up in the formula and "main" is not mentioned in the list.
>>=20
>>> The meaning of the formula is totally unclear to me.  =46rom what =
you gave
>>> you are calculating the fraction (R/P) multiply it with 100 (so you
>>> actually get (R/P) percent and now you multiply with another =
percentage
>>> (X).  So you have a percentage of a percentage.
>>=20
>>>> What I want to test is the value of X needed to equal Per from X's
>>>> maximum allocation down.
>>=20
>>> Can you write down a formula that contains all variables in your =
list
>>> and point at the fixed ones (constants), user inputs and variables =
you
>>> want to resolve?
>>=20
>>>> What i am thinking but cant get right
>>=20
>>>> Say
>>=20
>>>> R =3D 5
>>>> P =3D 10
>>>> Per =3D 190
>>>> X =3D max 80% of P
>>=20
>>>> For X in main =3D Per ( Closest whole number or half that equals =
closest
>>>> to but greater than Per)
>>>> main =3D (( 5 * 8)/10)*100
>>=20
>>>> So in example intially main equalled 400%. And answer I would want =
to
>>>> resolve it to is X =3D 4 which is 200% as 3.50 equals 180%.
>>=20
>>>> Any ideas?
>>=20
>>> Sorry you lost me somewhere along the path.  Also it's tea time =
right now...
>>=20
>>> Cheers
>>=20
>>>         robert
>>=20
>>> --
>>> remember.guy do |as, often| as.you_can - without =
endhttp://blog.rubybestpractices.com/
>>=20
>> So I want to check by changing X when in forumla "main" that it is =3D>=

>> than "per"
>>=20
>> In simple terms I want to calculate units needed to reach a rate of
>> return, X represents the variable units and per is the ROI(return of
>> investment rate I would deaire to acheive), R is the ratio of return
>> and P is a pool or base amount, I am using base 10 to start off with.
>>=20
>> I am trying to test X for a value, the only constraint on X is that =
it
>> cannot exceed 80% of the P or Pool amount.
>> So if I set per =3D 190%
>>=20
>> R =3D 5
>> P =3D 10
>> Per =3D 190
>> X =3D max 80% of P
>>=20
>> For X in main >=3D per
>>=20
>> main =3D (( 5 * X)/10)*100 >=3D 190%
>>=20
>> so for X =3D 80% of P or 8 base units
>>=20
>> main =3D (( 5 * 8)/10)*100
>>=20
>> which would test out as
>>=20
>> main >=3D per
>>=20
>> 400 =3D> 190 -
>>=20
>> So when X is 8 units the main section is greater than per but its not
>> the closest whole unit to per.
>>=20
>> So when X =3D 40% or 4 base units
>>=20
>> main =3D (( 5 * 4)/10)*100
>> main >=3D per
>> 200 >=3D 190
>>=20
>> this is the largest unit in 0.5 increments that remains greater than
>> Per of 190 so I would want X once tested to resolve to this.
>>=20
>> I hope that made sense.
>=20
> So how do I best get X to run a loop in 0.5 increments until it
> reaches the closest value that makes the left side of an equation
> greater or equal to the right. But where it is the lowest value that
> is greater than or equal to the the right.
>=20
> Main =3D> Per - where main is the lowest value it can be greater than
> per.
>=20
> Cheers
>=20
> Sayth
>=20

Something's not right with your formulas (I suspect)

>>>> main =3D (( R * X)/P)*100

and X =3D X*P

so... main =3D  =20
R*(X*P)
----------- * 100
P        =20

the P's cancel out...
R*X*100

varying P will not change the results of your calculations...

here's what I believe that you're asking for...
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D
r =3D 5.0
p =3D 10.0
per =3D 190.0
x =3D 0.8

begin
main =3D ((r*(x*p))/p)*100  =20
lastSuccess =3D x if main >=3D per=20
x -=3D 0.05
end while main >=3D per
puts "#{lastSuccess*100.0}%"=20
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D
note: you can change p al day long and always get the same answer

there are probably more "rubified" ways to express this.
I've tried to maintain the approach you've stated.  However, I would =
simplify the equation first, and since the last X that succeeds as you =
decrement is the same thing as the first that succeeds as you're going =
up, I'd probably turn t into something like...
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D
r =3D 5.0
p =3D 10.0
per =3D 190.0
max_x =3D 0.8

x =3D 0.05
const =3D r*100 # simplified without X
x +=3D 0.05 while (x*const < per) && (x <=3D max_x)
puts x <=3D max_x ? "#{lastSuccess*100.0}%" : "no answer"
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D

Mike Cargal

mike / cargal.net
http://blog.mikecargal.com

```