Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Calculate exp() and log() without multiplication (quinapalus.com)
40 points by soundsop on May 23, 2009 | hide | past | favorite | 5 comments


While this method is interesting, a LUT is often better, especially in cases where you have a limited range or only need limited precision.

See http://git.videolan.org/?p=x264.git;a=commitdiff;h=549cc55b5... .


all those if's, no else's, ... looks like there is still room for optimization.

... and, pipelined CPU's dislike branching code. Are there tricks to do the same computation with fewer branches?


In the ARM there will not be branches. The sequences are short enough that conditional execution can be used. The deeply pipelined (x86 and such) processors have fast multiplies.

This looks especially handy for embedded processors. I was planning to use a lookup table and linear interpolation in an upcoming project to approximate log on an AVR, but I think I'll go with this instead.

The use of the comma operator is interesting.


The use of the comma operator is interesting.

Interesting? Meh. It's the difference between

  if (foo) { a = x; b = y; }
and

  if (foo) a = x, b = y;
So it's purely used as a notational quirk.

For loops and similar situations are when the comma operator really comes in handy - although you really need to watch out for the rule of not assigning to the same variable more than once before a sequence point, especially as many compilers will only warn you about it at highest warning level - or not at all.


Well, if you haven't got multiplication, your CPU is probably not pipelined, either. Depending on the platform, you may, however, be able to find certain non-branching conditional instructions that help with this sort of algorithm.




Consider applying for YC's Summer 2026 batch! Applications are open till May 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: