File: float_divmod_relaxed.py

package info (click to toggle)
micropython 1.26.1%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 50,196 kB
  • sloc: ansic: 324,551; python: 63,215; xml: 4,241; makefile: 3,618; sh: 1,586; javascript: 754; asm: 723; cpp: 83; exp: 11; pascal: 6
file content (35 lines) | stat: -rw-r--r-- 707 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# test floating point floor divide and modulus
# it has some tricky corner cases

# pyboard has 32-bit floating point and gives different (but still
# correct) answers for certain combinations of divmod arguments.


def test(x, y):
    div, mod = divmod(x, y)
    print(div == x // y, mod == x % y, abs(div * y + mod - x) < 1e-6)


test(1.23456, 0.7)
test(-1.23456, 0.7)
test(1.23456, -0.7)
test(-1.23456, -0.7)

a = 1.23456
b = 0.7
test(a, b)
test(a, -b)
test(-a, b)
test(-a, -b)

for i in range(25):
    x = (i - 12.5) / 6
    for j in range(25):
        y = (j - 12.5) / 6
        test(x, y)

# test division by zero error
try:
    divmod(1.0, 0)
except ZeroDivisionError:
    print("ZeroDivisionError")