Thanks for the idea Dan. Building on that, I added it upstream to the MuParser source. Now I have it in libmuparser as well:

./muparser-2.3.5/include/muParserTemplateMagic.h
static T Mod(T pixel, T div) { return lround(pixel) - ((lround(pixel) / lround(div)) * lround(div)); }

./muparser-2.3.5/src/muParser.cpp
   DefineFun(_T("mod"), MathImpl<value_type>::Mod);

After rebuild, leads to:

gdal raster calc \
   --input "p=input.tif" \
   --calc="mod(p[1], 50) == 0 ? p[1] : 255" \
   --ot=Byte \
   --output="output.tif" --co COMPRESS=DEFLATE --overwrite --progress

Ideally, though, having a mod function in GDAL itself would be awesome.

Scott


On 10/7/25 09:52, Daniel Baston wrote:
It's fairly straightforward to define functions in C++ and register them with muparser. You can see how we do this with "isnan" and "isnodata" here:

https://github.com/OSGeo/gdal/blob/ ca7a2d38893a8d6cdc03653b47712f4442d99d65/frmts/vrt/ vrtexpression_muparser.cpp#L27 <https://github.com/OSGeo/gdal/blob/ ca7a2d38893a8d6cdc03653b47712f4442d99d65/frmts/vrt/ vrtexpression_muparser.cpp#L27>

I don't think we want too many custom functions, but adding "mod" seems like a good idea.

Dan

On Tue, Oct 7, 2025 at 12:30 PM Scott via gdal-dev <gdal- [email protected] <mailto:[email protected]>> wrote:

    Greetings!

    I've been unable to find a modulo operator in CLI calc. It's not in the
    muparser functions or appear to be in the forth-coming 3.12 C pixel
    functions.

    This has been working with muparser, but it's messy every time you need
    a simple modulo. pixel is real or int, div is int:

    rint(pixel) - (rint(rint(pixel) / div) * div)

    Am I missing something? If not, consider this a feature request! :)

    Thanks!
    Scott

-- www.postholer.com <http://www.postholer.com>

    _______________________________________________
    gdal-dev mailing list
    [email protected] <mailto:[email protected]>
    https://lists.osgeo.org/mailman/listinfo/gdal-dev <https://
    lists.osgeo.org/mailman/listinfo/gdal-dev>


_______________________________________________
gdal-dev mailing list
[email protected]
https://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to