{"abstract":"Stochastic rounding accepts an out-of-range remainder.","category":"Floating-point arithmetic","checks":10,"contract":"Stipulated stochastic rounding of nonnegative significand with exact dyadic remainder rem/2**k. Draw is uniform integer in [0,2**k); increment magnitude iff draw<rem, then apply sign. Exact results never increment. Return rounded value and whether magnitude incremented.","contract_signature":"q,rem,k,draw,sign","evaluation_group":"s3-float-stochastic-round","failed_approach":"The attempted local correction if k<0 or draw<0: return \"invalid\" still violates the explicit regression fixtures.","family":"s3-floating_point_arithmetic-stochastic-round-range-validation","id":"FA-16676","implementations":{"attempt":{"sha256":"cf0393a49a268d261752c25da9dbd375fcd36dcd64e94956dfe6fdb3348b4cf1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nimport struct\nN = 1\nobservations = []\ndef solve(q,rem,k,draw,sign):\n    if k<0 or draw<0: return \"invalid\"\n    if rem==0: return [sign*q,False]\n    inc=draw<rem\n    return [sign*(q+int(inc)),inc]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('draw below', solve(N,3,3,2,1), [N+1,True])\ncheck('draw equality', solve(N,3,3,3,1), [N,False])\ncheck('draw above', solve(N,3,3,7,1), [N,False])\ncheck('negative increment', solve(N,3,3,1,-1), [-N-1,True])\ncheck('negative no increment', solve(N,3,3,5,-1), [-N,False])\ncheck('exact', solve(N,0,3,0,1), [N,False])\ncheck('invalid remainder', solve(N,8,3,0,1), \"invalid\")\ncheck('invalid draw', solve(N,3,3,8,1), \"invalid\")\ncheck('large resolution', solve(N,1,54,0,1), [N+1,True])\ncheck('resolution boundary', solve(N,1,54,1,1), [N,False])\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"530828dcd61e90da4f240638498b7af86723524ff6d94eec676dd93214af5df4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nimport struct\nN = 1\nobservations = []\ndef solve(q,rem,k,draw,sign):\n    if k<0 or rem<0 or rem>(1<<k) or draw<0 or draw>(1<<k): return \"invalid\"\n    if rem==0: return [sign*q,False]\n    inc=draw<rem\n    return [sign*(q+int(inc)),inc]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('draw below', solve(N,3,3,2,1), [N+1,True])\ncheck('draw equality', solve(N,3,3,3,1), [N,False])\ncheck('draw above', solve(N,3,3,7,1), [N,False])\ncheck('negative increment', solve(N,3,3,1,-1), [-N-1,True])\ncheck('negative no increment', solve(N,3,3,5,-1), [-N,False])\ncheck('exact', solve(N,0,3,0,1), [N,False])\ncheck('invalid remainder', solve(N,8,3,0,1), \"invalid\")\ncheck('invalid draw', solve(N,3,3,8,1), \"invalid\")\ncheck('large resolution', solve(N,1,54,0,1), [N+1,True])\ncheck('resolution boundary', solve(N,1,54,1,1), [N,False])\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"s3-floating_point_arithmetic-stochastic-round-range-validation","generated_at":"2026-09-29T14:39:38.704297+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"An offline floating representation model isolates a reproducible arithmetic fault.","root_cause":"Stochastic rounding accepts an out-of-range remainder. The faulty expression is if k<0 or rem<0 or rem>(1<<k) or draw<0 or draw>(1<<k): return \"invalid\".","sha256":"5940562d5fec45e2bfc50046c459aa496fd48ceeac8d0ed01531fb516212407b","title":"Stochastic rounding accepts an out-of-range remainder · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":42.42,"exit_code":1,"observations":[{"actual":[2,true],"check":"draw below","expected":[2,true],"passed":true},{"actual":[1,false],"check":"draw equality","expected":[1,false],"passed":true},{"actual":[1,false],"check":"draw above","expected":[1,false],"passed":true},{"actual":[-2,true],"check":"negative increment","expected":[-2,true],"passed":true},{"actual":[-1,false],"check":"negative no increment","expected":[-1,false],"passed":true},{"actual":[1,false],"check":"exact","expected":[1,false],"passed":true},{"actual":[2,true],"check":"invalid remainder","expected":"invalid","passed":false},{"actual":[1,false],"check":"invalid draw","expected":"invalid","passed":false},{"actual":[2,true],"check":"large resolution","expected":[2,true],"passed":true},{"actual":[1,false],"check":"resolution boundary","expected":[1,false],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"draw below\", \"actual\": [2, true], \"expected\": [2, true], \"passed\": true}, {\"check\": \"draw equality\", \"actual\": [1, false], \"expected\": [1, false], \"passed\": true}, {\"check\": \"draw above\", \"actual\": [1, false], \"expected\": [1, false], \"passed\": true}, {\"check\": \"negative increment\", \"actual\": [-2, true], \"expected\": [-2, true], \"passed\": true}, {\"check\": \"negative no increment\", \"actual\": [-1, false], \"expected\": [-1, false], \"passed\": true}, {\"check\": \"exact\", \"actual\": [1, false], \"expected\": [1, false], \"passed\": true}, {\"check\": \"invalid remainder\", \"actual\": [2, true], \"expected\": \"invalid\", \"passed\": false}, {\"check\": \"invalid draw\", \"actual\": [1, false], \"expected\": \"invalid\", \"passed\": false}, {\"check\": \"large resolution\", \"actual\": [2, true], \"expected\": [2, true], \"passed\": true}, {\"check\": \"resolution boundary\", \"actual\": [1, false], \"expected\": [1, false], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.267,"exit_code":1,"observations":[{"actual":[2,true],"check":"draw below","expected":[2,true],"passed":true},{"actual":[1,false],"check":"draw equality","expected":[1,false],"passed":true},{"actual":[1,false],"check":"draw above","expected":[1,false],"passed":true},{"actual":[-2,true],"check":"negative increment","expected":[-2,true],"passed":true},{"actual":[-1,false],"check":"negative no increment","expected":[-1,false],"passed":true},{"actual":[1,false],"check":"exact","expected":[1,false],"passed":true},{"actual":[2,true],"check":"invalid remainder","expected":"invalid","passed":false},{"actual":[1,false],"check":"invalid draw","expected":"invalid","passed":false},{"actual":[2,true],"check":"large resolution","expected":[2,true],"passed":true},{"actual":[1,false],"check":"resolution boundary","expected":[1,false],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"draw below\", \"actual\": [2, true], \"expected\": [2, true], \"passed\": true}, {\"check\": \"draw equality\", \"actual\": [1, false], \"expected\": [1, false], \"passed\": true}, {\"check\": \"draw above\", \"actual\": [1, false], \"expected\": [1, false], \"passed\": true}, {\"check\": \"negative increment\", \"actual\": [-2, true], \"expected\": [-2, true], \"passed\": true}, {\"check\": \"negative no increment\", \"actual\": [-1, false], \"expected\": [-1, false], \"passed\": true}, {\"check\": \"exact\", \"actual\": [1, false], \"expected\": [1, false], \"passed\": true}, {\"check\": \"invalid remainder\", \"actual\": [2, true], \"expected\": \"invalid\", \"passed\": false}, {\"check\": \"invalid draw\", \"actual\": [1, false], \"expected\": \"invalid\", \"passed\": false}, {\"check\": \"large resolution\", \"actual\": [2, true], \"expected\": [2, true], \"passed\": true}, {\"check\": \"resolution boundary\", \"actual\": [1, false], \"expected\": [1, false], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}