Hi, I have noticed that numpy introduces some unexpected type casts, that are in some cases problematic.
A very weird cast is int + uint64 -> float for instance, consider the following snippet: import numpy as np a=np.uint64(1) a+1 -> 2.0 this cast is quite different from what other programming languages (e.g., C) would do in this case, so it already comes unexpected. Furthermore, an int64 (or an uint64) is too large to fit into a float, hence this automatic conversion also results in data loss! For instance consider: a=np.uint64(18446744073709551614) a+np.uint64(1) -> 18446744073709551615 # CORRECT! a+1 -> 1.8446744073709552e+19 # Actually 1.84467440737095516160e+19 - LOSS OF DATA in fact np.uint64(a+1) -> 0 Weird, isn't it? Another issue is that variables unexpectedly change type with accumulation operators a=np.uint64(1) a+=1 now a is float I believe that some casting/promotion rules should be revised, since they now lead to difficult to catch, intermittent errors. In case this cannot be done immediately, I suggest at least documenting these promotions, providing examples on how to code many conventional tasks. E.g., incrementing an integer of unknown size b=a+type(a)(1) I have also reported this in https://github.com/numpy/numpy/issues/3118 Thanks! _______________________________________________ NumPy-Discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
