Download

How can I round a number to the closest power of 2?

As mentioned in the title, I would like to find a series of blueprint nodes that allows me to round a given number to the closest power of two value.
How could I do that?

Thanks :slight_smile:

So you want 30 to be 32 and 35 to be 64?

You could make a C++ Blueprint Function Library class and create a static BlueprintCallable function.

MyBlueprintFunctionLibrary.h


public:
    UFUNCTION(BlueprintCallable)
    static int32 GetRoundUpPowerOfTwo(int32 Value);

MyBlueprintFunctionLibrary.cpp


int32 UMyBlueprintFunctionLibrary::GetRoundUpPowerOfTwo(int32 Value)
{
    int32 result = 1;
    return result << FGenericPlatformMath::FloorLog2(FMath::Max(Value, 1) * 2);
}

If you instead want to round down then just remove the *** 2** .

I don’t know any easy way of doing this purely in Blueprint.

Yes, that’s what I am aiming to! I would like the given number to round to the closest power of two so in your example also 35 would round to 32, but if I get 55 it will round to 64 or 140 will round to 128.
Unfortunately, I would need a blueprint way to do it, because I am at zero with my C++ knowledge

You can do it like this:

… Quick test, so not sure if this is the best solution/errorproof, but it seems to work. You can test it by making these variables public or printing the value.

Thanks for that :slight_smile:
Now I just need to understand how to make a blutility out of it :stuck_out_tongue: