diff options
| author | KOBAYASHI Shuji <[email protected]> | 2019-01-06 23:05:13 +0900 |
|---|---|---|
| committer | KOBAYASHI Shuji <[email protected]> | 2019-01-06 23:05:13 +0900 |
| commit | c8f904b7f5f53482293815822cebe7d5ac4247c1 (patch) | |
| tree | cd72d2e92c9e9349058633fa7c62549e1c81d316 | |
| parent | 89c79e56c5881831bd5c4206efa3a5e82eaf9427 (diff) | |
| download | mruby-c8f904b7f5f53482293815822cebe7d5ac4247c1.tar.gz mruby-c8f904b7f5f53482293815822cebe7d5ac4247c1.zip | |
Fix 0.0 and -0.0 handling.
Fix the following issue:
Good:
$ bin/mruby -e 'p(-0.0)' #=> "-0"
Bad:
$ bin/mruby -e 'a=0.0; p(-0.0)' #=> "0"
| -rw-r--r-- | mrbgems/mruby-compiler/core/codegen.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index b3659863b..a17272ba7 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -8,6 +8,7 @@ #include <limits.h> #include <stdlib.h> #include <string.h> +#include <math.h> #include <mruby.h> #include <mruby/compile.h> #include <mruby/proc.h> @@ -566,9 +567,12 @@ new_lit(codegen_scope *s, mrb_value val) #ifndef MRB_WITHOUT_FLOAT case MRB_TT_FLOAT: for (i=0; i<s->irep->plen; i++) { + mrb_float f1, f2; pv = &s->irep->pool[i]; if (mrb_type(*pv) != MRB_TT_FLOAT) continue; - if (mrb_float(*pv) == mrb_float(val)) return i; + f1 = mrb_float(*pv); + f2 = mrb_float(val); + if (f1 == f2 && !signbit(f1) == !signbit(f2)) return i; } break; #endif |
