On Mon, Dec 2, 2013 at 1:28 AM, Amit Saha <[email protected]> wrote:
> Indeed, that's a good point. Surprisingly, C does it just fine:
>
> # include <stdio.h>
>
> int main(int argc, char **argv)
> {
>   float x = 0.0;
>   while(x<1)
>     {
>       x += 0.1;
>       printf("%f\n", x);
>     }
>
>   return 0;
> }

Python uses double precision:

    >>> import os, ctypes
    >>> open('tmp.c', 'w').write(r'''
    ... double test_d() {
    ...     double x = 0.0;
    ...     while (x < 1.0)
    ...         x += 0.1;
    ...     return x;
    ... }
    ... float test_f() {
    ...     float x = 0.0;
    ...     while (x < 1.0)
    ...         x += 0.1;
    ...     return x;
    ... }
    ... ''')
    >>> rc = os.system('gcc -shared -o tmp.so tmp.c')
    >>> tmp = ctypes.CDLL('./tmp.so')
    >>> tmp.test_d.restype = ctypes.c_double
    >>> tmp.test_f.restype = ctypes.c_float
    >>> tmp.test_d()
    1.0999999999999999
    >>> tmp.test_f()
    1.0000001192092896
_______________________________________________
Tutor maillist  -  [email protected]
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to