On Nov 8, 9:40 pm, flebber <flebber.c...@gmail.com> wrote:
> On Nov 8, 3:33 am, Mike Cargal <m...@cargal.net> wrote:
> > On Nov 7, 2010, at 12:20 AM, flebber wrote:
> > > On Nov 7, 12:13 pm, flebber <flebber.c...@gmail.com> wrote:
> > >> On Nov 7, 11:06 am, Mike Cargal <m...@cargal.net> wrote:
> > >>> 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:
> > >>>>>> On 06.11.2010 10:19, flebber wrote:
> > >>>>>>> I am trying to create a class. I am struggling to figure the best flow
> > >>>>>>> to get the maths side to work.
> > >>>>>>> So say that
> > >>>>>>> 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.
> > >>>>>>> So main = (( R * X)/P)*100
> > >>>>>> 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.
> > >>>>>> The meaning of the formula is totally unclear to me. From 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.
> > >>>>>>> What I want to test is the value of X needed to equal Per from X's
> > >>>>>>> maximum allocation down.
> > >>>>>> 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?
> > >>>>>>> What i am thinking but cant get right
> > >>>>>>> Say
> > >>>>>>> R = 5
> > >>>>>>> P = 10
> > >>>>>>> Per = 190
> > >>>>>>> X = max 80% of P
> > >>>>>>> For X in main = Per ( Closest whole number or half that equals closest
> > >>>>>>> to but greater than Per)
> > >>>>>>> main = (( 5 * 8)/10)*100
> > >>>>>>> So in example intially main equalled 400%. And answer I would want to
> > >>>>>>> resolve it to is X = 4 which is 200% as 3.50 equals 180%.
> > >>>>>>> Any ideas?
> > >>>>>> Sorry you lost me somewhere along the path. Also it's tea time right now...
> > >>>>>> Cheers
> > >>>>>> robert
> > >>>>>> --
> > >>>>>> remember.guy do |as, often| as.you_can - without endhttp://blog.rubybestpractices.com/
> > >>>>> So I want to check by changing X when in forumla "main" that it is =>
> > >>>>> than "per"
> > >>>>> 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.
> > >>>>> 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 = 190%
> > >>>>> R = 5
> > >>>>> P = 10
> > >>>>> Per = 190
> > >>>>> X = max 80% of P
> > >>>>> For X in main >= per
> > >>>>> main = (( 5 * X)/10)*100 >= 190%
> > >>>>> so for X = 80% of P or 8 base units
> > >>>>> main = (( 5 * 8)/10)*100
> > >>>>> which would test out as
> > >>>>> main >= per
> > >>>>> 400 => 190 -
> > >>>>> So when X is 8 units the main section is greater than per but its not
> > >>>>> the closest whole unit to per.
> > >>>>> So when X = 40% or 4 base units
> > >>>>> main = (( 5 * 4)/10)*100
> > >>>>> main >= per
> > >>>>> 200 >= 190
> > >>>>> 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.
> > >>>>> I hope that made sense.
> > >>>> 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.
> > >>>> Main => Per - where main is the lowest value it can be greater than
> > >>>> per.
> > >>>> Cheers
> > >>>> Sayth
> > >>> Something's not right with your formulas (I suspect)
> > >>>>>>> main = (( R * X)/P)*100
> > >>> and X = X*P
> > >>> so... main =
> > >>> R*(X*P)
> > >>> ----------- * 100
> > >>> P
> > >>> 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...
> > >>> ================================
> > >>> r = 5.0
> > >>> p = 10.0
> > >>> per = 190.0
> > >>> x = 0.8
> > >>> begin
> > >>> main = ((r*(x*p))/p)*100
> > >>> lastSuccess = x if main >= per
> > >>> x -= 0.05
> > >>> end while main >= per
> > >>> puts "#{lastSuccess*100.0}%"
> > >>> ===============================
> > >>> 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...
> > >>> ===============================
> > >>> r = 5.0
> > >>> p = 10.0
> > >>> per = 190.0
> > >>> max_x = 0.8
> > >>> x = 0.05
> > >>> const = r*100 # simplified without X
> > >>> x += 0.05 while (x*const < per) && (x <= max_x)
> > >>> puts x <= max_x ? "#{lastSuccess*100.0}%" : "no answer"
> > >>> ===============================
> > >>> Mike Cargal
> > >>> m...@cargal.nethttp://blog.mikecargal.com
> > >> Thanks for looking at this for me.
> > >>> You've really lost me when 80% turns into 8 (or 8 base units). What is a base unit? And why would it be equal to 10%?
> > >>> Are you looking to vary X from 80% down by 5% increments?
> > >> This test is the first of 4 I plan to make into one program. For each
> > >> their while be a maximum allocation so in this case 80% so may be 40%
> > >> etc. The pool in future will vary but I am using base 10 while I write
> > >> it(hoping it would be clearer for another person reading it). So that
> > >> means that X has a max allocation of units if 40% was the maximum
> > >> allocation and base 10 then X would be 4 units and I would want my
> > >> loop to test X from 0 to 4 in 0.5 increments.
> > >> I am going to need more time to read your solution as I haven't got it
> > >> first read. I had started to look athttp://www.rubyist.net/~slagell/ruby/iterators.html
> > >> and a solution flow similar to
> > >> > def WHILE(cond)
> > >> > return if not cond
> > >> > yield
> > >> > retry
> > >> > end
> > >> nil
> > >> > i=0; WHILE(i<3) { print i; i+=1 }
> > >> 012 nil- Hide quoted text -
> > >> - Show quoted text -
> > > Actually after re-reading your post I get it. All but one small bit.
> > > In your formula how does the ? "#{lastSuccess*100.0}%" bit work? what
> > > data does lastSuccess pull.
> > > x = 0.05
> > > const = r*100 # simplified without X
> > > x += 0.05 while (x*const < per) && (x <= max_x)
> > > puts x <= max_x ? "#{lastSuccess*100.0}%" : "no answer"
> > my bad...
> > r = 5.0
> > p = 10.0
> > per = 190.0
> > max_x = 0.8
> > x = 0.05
> > const = r*100 # simplified without X
> > x += 0.05 while (x*const < per) && (x <= max_x)
> > puts x <= max_x ? "#{x*100.0}%" : "no answer"
> > Mike Cargal
> > m...@cargal.nethttp://blog.mikecargal.com
> > I still think we first need to get the math correct before we can come
> > up with solutions. Formulas I have seen in this thread look like they
> > could be solved with some simple transformations and do not need any
> > nested intervals or similar approximation algorithms. So far I find the
> > problem description quite confusing.
> Essentially without formulas all I am calculating is how many units at
> a specified rate of return it would take to reach a percentage of rate
> of return. Only additionally I have specified a maximum unit
> allocation. There would ultimately be several options with different
> return rates and max allocations from each pool. A pool is a
> percentage subset of a bank.
> > x = 0.05
> > const = r*100 # simplified without X
> > x += 0.05 while (x*const < per) && (x <= max_x)
> > puts x <= max_x ? "#{x*100.0}%" : "no answer"
> Mikes solution definitely works for working units(X)..thank you. I
> need to set constants and obtain user inputs for different scenarios
> and call it to the function.
> > could be solved with some simple transformations and do not need any
> I need to lookup what a transformation is...
This is where I was headed with it....any suggestions apprecaited.
Bank = $500.00 # later to be a running total calculated
def ROIcalc
const = r*100 # simplified without X
x += 0.05 while (x*const < per) && (x <= max_x)
puts x <= max_x ? "#{x*100.0}%" : "no answer"
end
def pool
if Bank > 200 then Bank * 0.05
Else 10.00
end
# Scenario 1
a = ROIcalc(per = 190, max_x = 0.8, puts "What ratio of return do you
expect?" r = gets.chomp, pool)
b = ROIcalc(per = 200, max_x = 0.4, r = 12.00, pool)
# output result if valid
# or return no valid result choose another scenario or end.
This is where I was headed.
Bank = $500.00 # later to be a running total calculated
def ROIcalc
const = r*100 # simplified without X
x += 0.05 while (x*const < per) && (x <= max_x)
puts x <= max_x ? "#{x*100.0}%" : "no answer"
end
def pool
if Bank > 200 then Bank * 0.05
Else $10.00
end
# Scenario 1
a = ROIcalc(per = 190, max_x = 0.8, puts "What ratio of return do you
expect?" r = gets.chomp, pool)
b = ROIcalc(per = 200, max_x = 0.4, r = 12.00, pool)
# output result if valid
# or return no valid result choose another scenario or end.