{"abstract":"Stochastic rounding increments an exactly represented input on zero draw.","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.","evaluation_group":"s3-float-stochastic-round","failed_approach":"The attempted local correction if rem==0: return [sign*(q+1),True] still violates the explicit regression fixtures.","family":"s3-floating_point_arithmetic-stochastic-round-exact-increment","id":"FA-16666","implementations":{"attempt":{"sha256":"6190dcb4ae570ade978d759f5bf1c4dced49900fbec099b94156948ed59f041c","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+1),True]\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":"92c49085b68dba4975aa832bcd04fd161bee5d48e7fddcfc362687c2ae4f2d6e","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+int(draw==0)),draw==0]\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"},"fixed":{"sha256":"74f7e37101b15188f374d172616fb946764e6cdc3d45d59d3c86cfa8ddcf5126","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-exact-increment","generated_at":"2026-09-29T14:39:38.657269+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.","repair":"Apply the contract at this fault site using if rem==0: return [sign*q,False].","root_cause":"Stochastic rounding increments an exactly represented input on zero draw. The faulty expression is if rem==0: return [sign*(q+int(draw==0)),draw==0].","sha256":"ac580c11de9bc54ea80116d46445afb12e2c4f06f3175742cc495e3495a01c83","title":"Stochastic rounding increments an exactly represented input on zero draw · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.622,"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":[2,true],"check":"exact","expected":[1,false],"passed":false},{"actual":"invalid","check":"invalid remainder","expected":"invalid","passed":true},{"actual":"invalid","check":"invalid draw","expected":"invalid","passed":true},{"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\": [2, true], \"expected\": [1, false], \"passed\": false}, {\"check\": \"invalid remainder\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"invalid draw\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"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":42.586,"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":[2,true],"check":"exact","expected":[1,false],"passed":false},{"actual":"invalid","check":"invalid remainder","expected":"invalid","passed":true},{"actual":"invalid","check":"invalid draw","expected":"invalid","passed":true},{"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\": [2, true], \"expected\": [1, false], \"passed\": false}, {\"check\": \"invalid remainder\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"invalid draw\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"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"},"fixed":{"elapsed_ms":44.215,"exit_code":0,"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":"invalid","check":"invalid remainder","expected":"invalid","passed":true},{"actual":"invalid","check":"invalid draw","expected":"invalid","passed":true},{"actual":[2,true],"check":"large resolution","expected":[2,true],"passed":true},{"actual":[1,false],"check":"resolution boundary","expected":[1,false],"passed":true}],"passed":true,"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\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"invalid draw\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"large resolution\", \"actual\": [2, true], \"expected\": [2, true], \"passed\": true}, {\"check\": \"resolution boundary\", \"actual\": [1, false], \"expected\": [1, false], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}