summaryrefslogtreecommitdiffstatshomepage
path: root/py/objfloat.c
diff options
context:
space:
mode:
authorRachel Dowdall <rjdowdall@gmail.com>2014-03-20 22:40:38 +0000
committerRachel Dowdall <rjdowdall@gmail.com>2014-03-20 22:40:38 +0000
commit300c8bd4c2c0c6d626a6aaeb873c22a8f8b9fc3f (patch)
tree96a2e445c19b7535a708b89aeddc378727366148 /py/objfloat.c
parenta2f2f734ed5ee1294a44592448e5b0f45a12e254 (diff)
downloadmicropython-300c8bd4c2c0c6d626a6aaeb873c22a8f8b9fc3f.tar.gz
micropython-300c8bd4c2c0c6d626a6aaeb873c22a8f8b9fc3f.zip
Added ZeroDivisionError to float division.
Diffstat (limited to 'py/objfloat.c')
-rw-r--r--py/objfloat.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/py/objfloat.c b/py/objfloat.c
index 401c1145ee..704b3d5998 100644
--- a/py/objfloat.c
+++ b/py/objfloat.c
@@ -1,5 +1,6 @@
#include <stdlib.h>
#include <assert.h>
+#include <math.h>
#include "nlr.h"
#include "misc.h"
@@ -105,8 +106,12 @@ mp_obj_t mp_obj_float_binary_op(int op, mp_float_t lhs_val, mp_obj_t rhs_in) {
case RT_BINARY_OP_INPLACE_FLOOR_DIVIDE: val = lhs_val / rhs_val; break;
*/
case RT_BINARY_OP_TRUE_DIVIDE:
- case RT_BINARY_OP_INPLACE_TRUE_DIVIDE: lhs_val /= rhs_val; break;
-
+ case RT_BINARY_OP_INPLACE_TRUE_DIVIDE:
+ lhs_val /= rhs_val;
+ if (isinf(lhs_val)){ // check for division by zero
+ nlr_jump(mp_obj_new_exception_msg(&mp_type_ZeroDivisionError, "float division by zero"));
+ }
+ break;
case RT_BINARY_OP_LESS: return MP_BOOL(lhs_val < rhs_val);
case RT_BINARY_OP_MORE: return MP_BOOL(lhs_val > rhs_val);
case RT_BINARY_OP_LESS_EQUAL: return MP_BOOL(lhs_val <= rhs_val);