From: Mike Cargal Date: 2010-11-07T09:06:29+09:00 Subject: Re: Create a class - ideas On Nov 6, 2010, at 7:00 PM, flebber wrote: > On Nov 7, 9:45 am, flebber wrote: >> On Nov 7, 2:24 am, Robert Klemme 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 mike@cargal.net http://blog.mikecargal.com