Question

I am looking for a way to convert any number to a percentage in the following way:

  1. 1.00 is 50%
  2. numbers below 1.00 approach 0% logarithmically
  3. numbers above 1.00 approach 100% logarithmically.

    x > 0. So y needs to approach 0 as x becomes infinitely small on the positive side.

I'm sure this is simple to do, but I can't recall how to do it.

Was it helpful?

Solution

try 1 / (1 + e^(1-x))

it's the logistic function shifted by 1 unit

graph

If you want it to approach faster, you can change e to something higher

Edit:

to have f(0) = 0 you could use 1 - 2^(-x)

graph

OTHER TIPS

When you say logarithmically, do you mean asymptotically? If so, then "y needs to approach 0 as x becomes infinitely small on the positive side" just means f(0)=0 if f is continuous. In that case x/(x+1) will work: http://www.wolframalpha.com/input/?i=x%2F%28x%2B1%29

how about y = f(t) = 1 - exp(-t/tau) ?

For t near 0, y is approximately t/tau. For t approaching infinity, y asymptotically approaches 1.

As for the f(1)=0.5 approach, this can be used to solve for tau = 1/log(2).

From what you're describing, I'm hearing the graph of x cubed -- very basic, and should be efficient in most languages.

Graph http://jedsmith.org/static/S01813305.png

This was graphed with y=(x-1)^3+1 (transforms to make (1,1) the origin). You can, of course, make the results a percentage by simply scaling by 50.

You are, ultimately, trying to have an efficient solution to give you a rough percentage behavior in a programming language and not Mathematica, right?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top