Hi, On Sun, Oct 30, 2011 at 2:38 AM, Berthold Höllmann <berth...@xn--hllmanns-n4a.de> wrote: > Matthew Brett <matthew.br...@gmail.com> writes: > >> Hi, >> >> Can anyone think of a good way to set a float128 value to an >> arbitrarily large number? >> >> As in >> >> v = int_to_float128(some_value) >> >> ? >> >> I'm trying things like >> >> v = np.float128(2**64+2) >> >> but, because (in other threads) the float128 seems to be going through >> float64 on assignment, this loses precision, so although 2**64+2 is >> representable in float128, in fact I get: >> >> In [35]: np.float128(2**64+2) >> Out[35]: 18446744073709551616.0 >> >> In [36]: 2**64+2 >> Out[36]: 18446744073709551618L >> >> So - can anyone think of another way to assign values to float128 that >> will keep the precision? > > Just use float128 all the was through, and avoid casting to float in > between: > > .>>> "%20.1f"%float(2**64+2) > '18446744073709551616.0' > .>>> np.float128(np.float128(2)**64+2) > 18446744073709551618.0
Ah yes - sorry - that would work in this example where I know the component parts of the number, but I was thinking in the general case where I have been given any int. I think my code works for that, by casting to float64 to break up the number into parts: In [35]: def int_to_float128(val): ....: f64 = np.float64(val) ....: res = val - int(f64) ....: return np.float128(f64) + np.float128(res) ....: In [36]: int_to_float128(2**64) Out[36]: 18446744073709551616.0 In [37]: int_to_float128(2**64+2) Out[37]: 18446744073709551618.0 Thanks, Matthew _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion