On Mon, Dec 2, 2013 at 4:49 PM, eryksun <eryk...@gmail.com> wrote: > On Mon, Dec 2, 2013 at 1:28 AM, Amit Saha <amitsaha...@gmail.com> 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
Thanks eryksun, that example taught me more than one thing there. Best, Amit. -- http://echorand.me _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor