On 04/21/2016 08:18 PM, Tom Lane wrote:
> Hm.  This seems to prove that we're not getting exactly 1.0 from
> (asin(x) / asin_0_5) with x = 0.5, but I'm having a hard time guessing
> why that might be so when all the other cases work.
> 
> Could you send along the assembler code generated by the compiler (-S
> output) for float.c?  Maybe that would shed some light.  Probably the
> -O0 version would be easier to read.

Attached is a smaller test program that prints 29.9999999999999964 (same
as failing test result) as well as its assembler code.

#include <float.h>
#include <math.h>
#include <stdio.h>

static double
sub()
{
	double asin_0_5 = asin(0.5);
	double x = 0.5;
	return (asin(x) / asin_0_5) * 30.0;
}

int
main()
{
	printf("%.*g\n", DBL_DIG + 3, sub());

	return 0;
}
        .file   "test.c"
        .text
        .type   sub, @function
sub:
.LFB0:
        .cfi_startproc
        pushl   %ebp
        .cfi_def_cfa_offset 8
        .cfi_offset 5, -8
        movl    %esp, %ebp
        .cfi_def_cfa_register 5
        subl    $24, %esp
        fldl    .LC0
        fstpl   -16(%ebp)
        fldl    .LC1
        fstpl   -24(%ebp)
        subl    $8, %esp
        pushl   -20(%ebp)
        pushl   -24(%ebp)
        call    asin
        addl    $16, %esp
        fdivl   -16(%ebp)
        fldl    .LC2
        fmulp   %st, %st(1)
        leave
        .cfi_restore 5
        .cfi_def_cfa 4, 4
        ret
        .cfi_endproc
.LFE0:
        .size   sub, .-sub
        .section        .rodata
.LC4:
        .string "%.*g\n"
        .text
        .globl  main
        .type   main, @function
main:
.LFB1:
        .cfi_startproc
        leal    4(%esp), %ecx
        .cfi_def_cfa 1, 0
        andl    $-16, %esp
        pushl   -4(%ecx)
        pushl   %ebp
        .cfi_escape 0x10,0x5,0x2,0x75,0
        movl    %esp, %ebp
        pushl   %ecx
        .cfi_escape 0xf,0x3,0x75,0x7c,0x6
        subl    $4, %esp
        call    sub
        leal    -8(%esp), %esp
        fstpl   (%esp)
        pushl   $18
        pushl   $.LC4
        call    printf
        addl    $16, %esp
        movl    $0, %eax
        movl    -4(%ebp), %ecx
        .cfi_def_cfa 1, 0
        leave
        .cfi_restore 5
        leal    -4(%ecx), %esp
        .cfi_def_cfa 4, 4
        ret
        .cfi_endproc
.LFE1:
        .size   main, .-main
        .section        .rodata
        .align 8
.LC0:
        .long   942502758
        .long   1071694162
        .align 8
.LC1:
        .long   0
        .long   1071644672
        .align 8
.LC2:
        .long   0
        .long   1077805056
        .ident  "GCC: (Debian 5.3.1-13) 5.3.1 20160323"
        .section        .note.GNU-stack,"",@progbits
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to