Using pow() for non-integers

I am trying to raise X ^ 0.026 using

float X = 2.0;
float Y = pow(X,0.026);

This returns 0.0 when it should return 1.018.

Does pow() require an integer? Is there a way around this? I have also tried

float Y = exp(0.026*log(X));

and I still return 0.0.

float X = 2.0;
float Y = pow(X,0.026);
println( Y ); // Prints 1.0181853

I’m not having a problem with it. How are you seeing the value of Y?

1 Like

I have no idea why it works now. In my code I had

float X = 2;

and I changed it to

float X = 2.0;

and now it works…sigh.

I know it works now, but can I ask if this is Processing.js or regular Java Processing?

Processing is open-source, so you can view its source here. The pow() function is defined on line 4469.

static public final float pow(float n, float e) {
    return (float)Math.pow(n, e);
}

This defers to the Math.pow() function in Java, which you can read about here. The Math.pow() function takes double values as parameters, so no, pow() does not require integers.

This also works okay for me:

float x = 2;
float y = pow(x, 0.026);
println(y);

My best guess is you maybe had something like this:

float x = 1/2;
float y = pow(x, 0.026);
println(y);

With this code, the 1/2 calculation is done first, and since they’re both int primitives, the result is 0.

Or maybe something like this:

float x = 2;
float y = pow(X, 0.026);
println(y);

Note the upper-case X in the second line of code. This X is a predefined value used internally by Processing, and its value is 0.

3 Likes

Up in the top corner it just says Java

This sounds like it may be your culprit.