FA-16031 / Floating-point arithmetic / Open access
Encoding applies the bias in the wrong direction · case 01
Encoding applies the bias in the wrong direction.
ROOT CAUSE
Encoding applies the bias in the wrong direction. The faulty expression is exponent=e-7.
VERIFIED REPAIR
Apply the contract at this fault site using exponent=e+7.
Unsuccessful approach: The attempted local correction exponent=abs(e)+7 still violates the explicit regression fixtures.
Case contract
Encode finite exactly represented dyadic x into sign/4-bit-exponent/3-bit-fraction toy float with bias 7, gradual underflow, round-to-nearest-even and infinity overflow. Return the unsigned byte. The miniature format is stipulated, not a hardware conformance claim.
Why this case matters
An offline floating representation model isolates a reproducible arithmetic fault.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
import struct
N = 1
observations = []
def solve(x):
sign=128 if math.copysign(1.0,x)<0 else 0
x=abs(x)
if x == 0: return sign
if x >= 248: return sign|120
if x < 2**-6:
q=round(x*512)
return sign|q
m,e=math.frexp(x)
e-=1
q=round(m*16)
if q == 16:
q=8
e+=1
if e>7: return sign|120
exponent=e-7
fraction=q-8
return sign|(exponent<<3)|fraction
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('zero', solve(0.0), 0)
check('negative zero', solve(-0.0), 128)
check('subnormal', solve(N/512), N)
check('negative subnormal', solve(-N/512), 128|N)
check('underflow tie', solve(1/1024), 0)
check('subnormal carry', solve(15/1024), 8)
check('normal varying', solve(2.0**N), (N+7)<<3)
check('normal fraction', solve((8+N)/8), 56+N)
check('binade carry', solve(1.9375), 64)
check('below midpoint', solve(1.90625), 63)
check('largest finite', solve(240.0), 119)
check('overflow tie', solve(248.0), 120)
check('negative overflow', solve(-256.0), 248)
check('minimum normal', solve(1/64), 8)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| zero | 0 | 0 | Passed |
| negative zero | 128 | 128 | Passed |
| subnormal | 1 | 1 | Passed |
| negative subnormal | 129 | 129 | Passed |
| underflow tie | 0 | 0 | Passed |
| subnormal carry | 8 | 8 | Passed |
| normal varying | -48 | 64 | Failed |
| normal fraction | -55 | 57 | Failed |
| binade carry | -48 | 64 | Failed |
| below midpoint | -49 | 63 | Failed |
| largest finite | 7 | 119 | Failed |
| overflow tie | 120 | 120 | Passed |
| negative overflow | 248 | 248 | Passed |
| minimum normal | -104 | 8 | Failed |
SHA-256 / ae0bd8a8b46dfbd59a21944ef380f560698566c63cddc41331b659d5c0bf0dcf
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
import struct
N = 1
observations = []
def solve(x):
sign=128 if math.copysign(1.0,x)<0 else 0
x=abs(x)
if x == 0: return sign
if x >= 248: return sign|120
if x < 2**-6:
q=round(x*512)
return sign|q
m,e=math.frexp(x)
e-=1
q=round(m*16)
if q == 16:
q=8
e+=1
if e>7: return sign|120
exponent=abs(e)+7
fraction=q-8
return sign|(exponent<<3)|fraction
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('zero', solve(0.0), 0)
check('negative zero', solve(-0.0), 128)
check('subnormal', solve(N/512), N)
check('negative subnormal', solve(-N/512), 128|N)
check('underflow tie', solve(1/1024), 0)
check('subnormal carry', solve(15/1024), 8)
check('normal varying', solve(2.0**N), (N+7)<<3)
check('normal fraction', solve((8+N)/8), 56+N)
check('binade carry', solve(1.9375), 64)
check('below midpoint', solve(1.90625), 63)
check('largest finite', solve(240.0), 119)
check('overflow tie', solve(248.0), 120)
check('negative overflow', solve(-256.0), 248)
check('minimum normal', solve(1/64), 8)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| zero | 0 | 0 | Passed |
| negative zero | 128 | 128 | Passed |
| subnormal | 1 | 1 | Passed |
| negative subnormal | 129 | 129 | Passed |
| underflow tie | 0 | 0 | Passed |
| subnormal carry | 8 | 8 | Passed |
| normal varying | 64 | 64 | Passed |
| normal fraction | 57 | 57 | Passed |
| binade carry | 64 | 64 | Passed |
| below midpoint | 63 | 63 | Passed |
| largest finite | 119 | 119 | Passed |
| overflow tie | 120 | 120 | Passed |
| negative overflow | 248 | 248 | Passed |
| minimum normal | 104 | 8 | Failed |
SHA-256 / d9d5f19feb89ac102aff56630319aa9916bb12cafd39c84f586d6b820dcdcccd
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
import struct
N = 1
observations = []
def solve(x):
sign=128 if math.copysign(1.0,x)<0 else 0
x=abs(x)
if x == 0: return sign
if x >= 248: return sign|120
if x < 2**-6:
q=round(x*512)
return sign|q
m,e=math.frexp(x)
e-=1
q=round(m*16)
if q == 16:
q=8
e+=1
if e>7: return sign|120
exponent=e+7
fraction=q-8
return sign|(exponent<<3)|fraction
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('zero', solve(0.0), 0)
check('negative zero', solve(-0.0), 128)
check('subnormal', solve(N/512), N)
check('negative subnormal', solve(-N/512), 128|N)
check('underflow tie', solve(1/1024), 0)
check('subnormal carry', solve(15/1024), 8)
check('normal varying', solve(2.0**N), (N+7)<<3)
check('normal fraction', solve((8+N)/8), 56+N)
check('binade carry', solve(1.9375), 64)
check('below midpoint', solve(1.90625), 63)
check('largest finite', solve(240.0), 119)
check('overflow tie', solve(248.0), 120)
check('negative overflow', solve(-256.0), 248)
check('minimum normal', solve(1/64), 8)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| zero | 0 | 0 | Passed |
| negative zero | 128 | 128 | Passed |
| subnormal | 1 | 1 | Passed |
| negative subnormal | 129 | 129 | Passed |
| underflow tie | 0 | 0 | Passed |
| subnormal carry | 8 | 8 | Passed |
| normal varying | 64 | 64 | Passed |
| normal fraction | 57 | 57 | Passed |
| binade carry | 64 | 64 | Passed |
| below midpoint | 63 | 63 | Passed |
| largest finite | 119 | 119 | Passed |
| overflow tie | 120 | 120 | Passed |
| negative overflow | 248 | 248 | Passed |
| minimum normal | 8 | 8 | Passed |
SHA-256 / a4885c1da227084f5313862887aa4cd62946fb499325336c2d369be5452b6fec
Verification & scope
Controlled binary64 or explicitly stipulated miniature format; no hardware exception flags or platform floating environment are modeled. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:39:32.612507+00:00.
Case digest / 9e8b896bbfbbe82fef647949bcda0317da0f1519840cbcb9eee6b32cb367dc87