diff --git a/mutmut/__init__.py b/mutmut/__init__.py
index a736caf..9af8f48 100644
--- a/mutmut/__init__.py
+++ b/mutmut/__init__.py
@@ -227,11 +227,17 @@ def number_mutation(value, **_):
 
     try:
         parsed = int(value, base=base)
+        result = repr(parsed + 1)
     except ValueError:
         # Since it wasn't an int, it must be a float
         parsed = float(value)
+        # This avoids all very small numbers becoming 1.0, and very
+        # large numbers not changing at all
+        if (1e-5 < abs(parsed) < 1e5) or (parsed == 0.0):
+            result = repr(parsed + 1)
+        else:
+            result = repr(parsed * 2)
 
-    result = repr(parsed + 1)
     if not result.endswith(suffix):
         result += suffix
     return result

diff --git a/tests/test_mutation.py b/tests/test_mutation.py
index 710c741..42c063e 100644
--- a/tests/test_mutation.py
+++ b/tests/test_mutation.py
@@ -74,6 +74,7 @@ for x in y:
         ('1.0', '2.0'),
         ('0.1', '1.1'),
         ('1e-3', '1.001'),
+        ('1e16', '2e+16'),
         ('True', 'False'),
         ('False', 'True'),
         ('"foo"', '"XXfooXX"'),
@@ -101,7 +102,8 @@ for x in y:
         ('1j', '2j'),
         ('1.0j', '2.0j'),
         ('0o1', '2'),
-        ('1.0e10', '10000000001.0'),
+        ('1.0e10', '20000000000.0'),
+        ('1.1e-16', '2.2e-16'),
         ("dict(a=b)", "dict(aXX=b)"),
         ("Struct(a=b)", "Struct(aXX=b)"),
         ("FooBarDict(a=b)", "FooBarDict(aXX=b)"),

Generation of unary plus in exponent is un-killable
Hello, thanks for the lovely tool!

mutmut generates mutants like the following, which are identical to the original code and thus un-killable (immortal?):

```diff
--- mvce/mvce.py
+++ mvce/mvce.py
@@ -1,3 +1,3 @@
 def multiply_by_1e100(number):
-    return number * 1e100
+    return number * 1e+100
```

Here's a test so that you can reproduce the whole thing:

```py
from mvce import multiply_by_1e100


def test_multiply_by_1e100():
    assert multiply_by_1e100(4) == 4e100
```

`1e16` seems to be the smallest number to which this happens. Smaller numbers get expanded from e.g. `1e2` to `101.0`
tests/test_mutation.py::test_basic_mutations[1e16-2e+16] tests/test_mutation.py::test_basic_mutations[1.0e10-20000000000.0] tests/test_mutation.py::test_basic_mutations[1.1e-16-2.2e-16]
tests/test_mutation.py::test_matches_py3 tests/test_mutation.py::test_matches tests/test_mutation.py::test_ast_pattern_for_loop tests/test_mutation.py::test_basic_mutations[lambda: tests/test_mutation.py::test_basic_mutations[a(b)-a(None)] tests/test_mutation.py::test_basic_mutations[a[b]-a[None]] tests/test_mutation.py::test_basic_mutations[1 tests/test_mutation.py::test_basic_mutations[1+1-2-2] tests/test_mutation.py::test_basic_mutations[1-2] tests/test_mutation.py::test_basic_mutations[1-1-2+2] tests/test_mutation.py::test_basic_mutations[1*1-2/2] tests/test_mutation.py::test_basic_mutations[1/1-2*2] tests/test_mutation.py::test_basic_mutations[1.0-2.0] tests/test_mutation.py::test_basic_mutations[0.1-1.1] tests/test_mutation.py::test_basic_mutations[1e-3-1.001] tests/test_mutation.py::test_basic_mutations[True-False] tests/test_mutation.py::test_basic_mutations[False-True] tests/test_mutation.py::test_basic_mutations["foo"-"XXfooXX"] tests/test_mutation.py::test_basic_mutations['foo'-'XXfooXX'] tests/test_mutation.py::test_basic_mutations[u'foo'-u'XXfooXX'] tests/test_mutation.py::test_basic_mutations[0-1] tests/test_mutation.py::test_basic_mutations[0o0-1] tests/test_mutation.py::test_basic_mutations[0.-1.0] tests/test_mutation.py::test_basic_mutations[0x0-1] tests/test_mutation.py::test_basic_mutations[0b0-1] tests/test_mutation.py::test_basic_mutations[1<2-2<=3] tests/test_mutation.py::test_basic_mutations[(1, tests/test_mutation.py::test_basic_mutations[foo tests/test_mutation.py::test_basic_mutations[x tests/test_mutation.py::test_basic_mutations[a tests/test_mutation.py::test_basic_mutations[s[0]-s[1]] tests/test_mutation.py::test_basic_mutations[s[0] tests/test_mutation.py::test_basic_mutations[s[x]-s[None]] tests/test_mutation.py::test_basic_mutations[s[1:]-s[2:]] tests/test_mutation.py::test_basic_mutations[1j-2j] tests/test_mutation.py::test_basic_mutations[1.0j-2.0j] tests/test_mutation.py::test_basic_mutations[0o1-2] tests/test_mutation.py::test_basic_mutations[dict(a=b)-dict(aXX=b)] tests/test_mutation.py::test_basic_mutations[Struct(a=b)-Struct(aXX=b)] tests/test_mutation.py::test_basic_mutations[FooBarDict(a=b)-FooBarDict(aXX=b)] tests/test_mutation.py::test_basic_mutations[lambda tests/test_mutation.py::test_basic_mutations[break-continue] tests/test_mutation.py::test_multiple_mutations[x+=1-expected0] tests/test_mutation.py::test_multiple_mutations[x-=1-expected1] tests/test_mutation.py::test_multiple_mutations[x*=1-expected2] tests/test_mutation.py::test_multiple_mutations[x/=1-expected3] tests/test_mutation.py::test_multiple_mutations[x//=1-expected4] tests/test_mutation.py::test_multiple_mutations[x%=1-expected5] tests/test_mutation.py::test_multiple_mutations[x<<=1-expected6] tests/test_mutation.py::test_multiple_mutations[x>>=1-expected7] tests/test_mutation.py::test_multiple_mutations[x&=1-expected8] tests/test_mutation.py::test_multiple_mutations[x|=1-expected9] tests/test_mutation.py::test_multiple_mutations[x^=1-expected10] tests/test_mutation.py::test_multiple_mutations[x**=1-expected11] tests/test_mutation.py::test_basic_mutations_python3[a: tests/test_mutation.py::test_basic_mutations_python3[def tests/test_mutation.py::test_basic_mutations_python3[a tests/test_mutation.py::test_basic_mutations_python3[lambda tests/test_mutation.py::test_basic_mutations_python3[lambda: tests/test_mutation.py::test_basic_mutations_python36[a: tests/test_mutation.py::test_do_not_mutate[foo(a, tests/test_mutation.py::test_do_not_mutate['''foo'''] tests/test_mutation.py::test_do_not_mutate[r'''foo'''] tests/test_mutation.py::test_do_not_mutate[(x tests/test_mutation.py::test_do_not_mutate[NotADictSynonym(a=b)] tests/test_mutation.py::test_do_not_mutate[from tests/test_mutation.py::test_do_not_mutate[import tests/test_mutation.py::test_do_not_mutate[foo.bar] tests/test_mutation.py::test_do_not_mutate[for tests/test_mutation.py::test_do_not_mutate[def tests/test_mutation.py::test_do_not_mutate_python3[def tests/test_mutation.py::test_do_not_mutate_python3[a[None]] tests/test_mutation.py::test_do_not_mutate_python3[a(None)] tests/test_mutation.py::test_mutate_body_of_function_with_return_type_annotation tests/test_mutation.py::test_mutate_all tests/test_mutation.py::test_mutate_both tests/test_mutation.py::test_perform_one_indexed_mutation tests/test_mutation.py::test_function tests/test_mutation.py::test_function_with_annotation tests/test_mutation.py::test_pragma_no_mutate tests/test_mutation.py::test_pragma_no_mutate_and_no_cover tests/test_mutation.py::test_mutate_decorator tests/test_mutation.py::test_mutate_dict tests/test_mutation.py::test_mutate_dict2 tests/test_mutation.py::test_performed_mutation_ids tests/test_mutation.py::test_syntax_error tests/test_mutation.py::test_bug_github_issue_18 tests/test_mutation.py::test_bug_github_issue_19 tests/test_mutation.py::test_bug_github_issue_26 tests/test_mutation.py::test_bug_github_issue_30 tests/test_mutation.py::test_bug_github_issue_77 tests/test_mutation.py::test_multiline_dunder_whitelist tests/test_mutation.py::test_bug_github_issue_162 tests/test_mutation.py::test_bad_mutation_str_type_definition