On Nov 2, 2009, at 12:03 PM, Stephen J. Butler wrote:
I scanned through, and while there are some simple cases these
implementations check for, it doesn't appear x^2 is one of them. So
pow(x,2) is likely to be much slower than x*x.

The Libc implementations don't check, but the compiler does. It has special knowledge of some functions including pow(), and will substitute it's own code if it will be faster.

This is easy to test empirically. In this simple case, the compiler does optimize pow(x, 2) directly to a single-instruction x*x.

% cat test.c
#include <math.h>
int main(int argc, char **argv) {
    return pow(argc, 2);
}
% cc -O3 test.c -o - -S
[...]
_main:
LFB17:
        pushq   %rbp                            // build stack frame
LCFI0:
        movq    %rsp, %rbp                      // build stack frame
LCFI1:
        cvtsi2sd        %edi, %xmm0             // convert int argc to float
        mulsd   %xmm0, %xmm0            // pow(argc, 2)
        cvttsd2si       %xmm0, %eax             // convert float->int for return
        leave
        ret


--
Greg Parker     [email protected]     Runtime Wrangler


_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to