{"abstract":"Nearest rounding loses sticky residue after a guard.","category":"Floating-point arithmetic","checks":12,"contract":"Round a nonnegative integer significand q with guard, round and sticky bits. Modes are nearest-even, nearest-away, zero, up, down; sign is +1 or -1. Return rounded signed integer, inexact flag, and whether rounding incremented the magnitude.","evaluation_group":"s3-float-round-grs","failed_approach":"The attempted local correction bool(g and q%2) still violates the explicit regression fixtures.","family":"s3-floating_point_arithmetic-round-grs-sticky-residue","id":"FA-15961","implementations":{"attempt":{"sha256":"4852e2ecc96128fe716cea7446ae021a8b4ad7c7ba40f34db4706de06230ab63","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nimport struct\nN = 1\nobservations = []\ndef solve(q,g,r,s,sign,mode):\n    inexact=bool(g or r or s)\n    if mode == 'nearest-even': increment=bool(g and q%2)\n    elif mode == 'nearest-away': increment=bool(g)\n    elif mode == 'up': increment=sign>0 and inexact\n    elif mode == 'down': increment=sign<0 and inexact\n    else: increment=False\n    value=sign*(q+int(increment))\n    return [value,inexact,bool(increment)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('tie even', solve(2*N,1,0,0,1,\"nearest-even\"), [2*N,True,False])\ncheck('tie odd', solve(2*N+1,1,0,0,1,\"nearest-even\"), [2*N+2,True,True])\ncheck('above tie sticky', solve(2*N,1,0,1,1,\"nearest-even\"), [2*N+1,True,True])\ncheck('above tie round', solve(2*N,1,1,0,1,\"nearest-even\"), [2*N+1,True,True])\ncheck('below half', solve(2*N,0,1,1,1,\"nearest-even\"), [2*N,True,False])\ncheck('nearest away', solve(2*N,1,0,0,-1,\"nearest-away\"), [-2*N-1,True,True])\ncheck('up positive', solve(N,0,0,1,1,\"up\"), [N+1,True,True])\ncheck('up negative', solve(N,1,1,1,-1,\"up\"), [-N,True,False])\ncheck('down negative', solve(N,0,1,0,-1,\"down\"), [-N-1,True,True])\ncheck('down positive', solve(N,1,1,1,1,\"down\"), [N,True,False])\ncheck('truncate', solve(N,1,1,1,-1,\"zero\"), [-N,True,False])\ncheck('exact', solve(N,0,0,0,1,\"up\"), [N,False,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":"43b4461303fb6a583c10c5cc3c3e3161775986ceeca035aebff812ae30041c6c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nimport struct\nN = 1\nobservations = []\ndef solve(q,g,r,s,sign,mode):\n    inexact=bool(g or r or s)\n    if mode == 'nearest-even': increment=bool(g and (r or q%2))\n    elif mode == 'nearest-away': increment=bool(g)\n    elif mode == 'up': increment=sign>0 and inexact\n    elif mode == 'down': increment=sign<0 and inexact\n    else: increment=False\n    value=sign*(q+int(increment))\n    return [value,inexact,bool(increment)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('tie even', solve(2*N,1,0,0,1,\"nearest-even\"), [2*N,True,False])\ncheck('tie odd', solve(2*N+1,1,0,0,1,\"nearest-even\"), [2*N+2,True,True])\ncheck('above tie sticky', solve(2*N,1,0,1,1,\"nearest-even\"), [2*N+1,True,True])\ncheck('above tie round', solve(2*N,1,1,0,1,\"nearest-even\"), [2*N+1,True,True])\ncheck('below half', solve(2*N,0,1,1,1,\"nearest-even\"), [2*N,True,False])\ncheck('nearest away', solve(2*N,1,0,0,-1,\"nearest-away\"), [-2*N-1,True,True])\ncheck('up positive', solve(N,0,0,1,1,\"up\"), [N+1,True,True])\ncheck('up negative', solve(N,1,1,1,-1,\"up\"), [-N,True,False])\ncheck('down negative', solve(N,0,1,0,-1,\"down\"), [-N-1,True,True])\ncheck('down positive', solve(N,1,1,1,1,\"down\"), [N,True,False])\ncheck('truncate', solve(N,1,1,1,-1,\"zero\"), [-N,True,False])\ncheck('exact', solve(N,0,0,0,1,\"up\"), [N,False,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":"a5a73ab805edc4aec7482b1c8c458ae63df1e594277495dbf7311049afcbfc91","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nimport struct\nN = 1\nobservations = []\ndef solve(q,g,r,s,sign,mode):\n    inexact=bool(g or r or s)\n    if mode == 'nearest-even': increment=bool(g and (r or s or q%2))\n    elif mode == 'nearest-away': increment=bool(g)\n    elif mode == 'up': increment=sign>0 and inexact\n    elif mode == 'down': increment=sign<0 and inexact\n    else: increment=False\n    value=sign*(q+int(increment))\n    return [value,inexact,bool(increment)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('tie even', solve(2*N,1,0,0,1,\"nearest-even\"), [2*N,True,False])\ncheck('tie odd', solve(2*N+1,1,0,0,1,\"nearest-even\"), [2*N+2,True,True])\ncheck('above tie sticky', solve(2*N,1,0,1,1,\"nearest-even\"), [2*N+1,True,True])\ncheck('above tie round', solve(2*N,1,1,0,1,\"nearest-even\"), [2*N+1,True,True])\ncheck('below half', solve(2*N,0,1,1,1,\"nearest-even\"), [2*N,True,False])\ncheck('nearest away', solve(2*N,1,0,0,-1,\"nearest-away\"), [-2*N-1,True,True])\ncheck('up positive', solve(N,0,0,1,1,\"up\"), [N+1,True,True])\ncheck('up negative', solve(N,1,1,1,-1,\"up\"), [-N,True,False])\ncheck('down negative', solve(N,0,1,0,-1,\"down\"), [-N-1,True,True])\ncheck('down positive', solve(N,1,1,1,1,\"down\"), [N,True,False])\ncheck('truncate', solve(N,1,1,1,-1,\"zero\"), [-N,True,False])\ncheck('exact', solve(N,0,0,0,1,\"up\"), [N,False,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-round-grs-sticky-residue","generated_at":"2026-09-29T14:39:31.976912+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 bool(g and (r or s or q%2)).","root_cause":"Nearest rounding loses sticky residue after a guard. The faulty expression is bool(g and (r or q%2)).","sha256":"8b4e2d174f4e99cb173980b1b6888e9d4894488734acd717546a9af2239b2550","title":"Nearest rounding loses sticky residue after a guard · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":45.487,"exit_code":1,"observations":[{"actual":[2,true,false],"check":"tie even","expected":[2,true,false],"passed":true},{"actual":[4,true,true],"check":"tie odd","expected":[4,true,true],"passed":true},{"actual":[2,true,false],"check":"above tie sticky","expected":[3,true,true],"passed":false},{"actual":[2,true,false],"check":"above tie round","expected":[3,true,true],"passed":false},{"actual":[2,true,false],"check":"below half","expected":[2,true,false],"passed":true},{"actual":[-3,true,true],"check":"nearest away","expected":[-3,true,true],"passed":true},{"actual":[2,true,true],"check":"up positive","expected":[2,true,true],"passed":true},{"actual":[-1,true,false],"check":"up negative","expected":[-1,true,false],"passed":true},{"actual":[-2,true,true],"check":"down negative","expected":[-2,true,true],"passed":true},{"actual":[1,true,false],"check":"down positive","expected":[1,true,false],"passed":true},{"actual":[-1,true,false],"check":"truncate","expected":[-1,true,false],"passed":true},{"actual":[1,false,false],"check":"exact","expected":[1,false,false],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"tie even\", \"actual\": [2, true, false], \"expected\": [2, true, false], \"passed\": true}, {\"check\": \"tie odd\", \"actual\": [4, true, true], \"expected\": [4, true, true], \"passed\": true}, {\"check\": \"above tie sticky\", \"actual\": [2, true, false], \"expected\": [3, true, true], \"passed\": false}, {\"check\": \"above tie round\", \"actual\": [2, true, false], \"expected\": [3, true, true], \"passed\": false}, {\"check\": \"below half\", \"actual\": [2, true, false], \"expected\": [2, true, false], \"passed\": true}, {\"check\": \"nearest away\", \"actual\": [-3, true, true], \"expected\": [-3, true, true], \"passed\": true}, {\"check\": \"up positive\", \"actual\": [2, true, true], \"expected\": [2, true, true], \"passed\": true}, {\"check\": \"up negative\", \"actual\": [-1, true, false], \"expected\": [-1, true, false], \"passed\": true}, {\"check\": \"down negative\", \"actual\": [-2, true, true], \"expected\": [-2, true, true], \"passed\": true}, {\"check\": \"down positive\", \"actual\": [1, true, false], \"expected\": [1, true, false], \"passed\": true}, {\"check\": \"truncate\", \"actual\": [-1, true, false], \"expected\": [-1, true, false], \"passed\": true}, {\"check\": \"exact\", \"actual\": [1, false, false], \"expected\": [1, false, false], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.148,"exit_code":1,"observations":[{"actual":[2,true,false],"check":"tie even","expected":[2,true,false],"passed":true},{"actual":[4,true,true],"check":"tie odd","expected":[4,true,true],"passed":true},{"actual":[2,true,false],"check":"above tie sticky","expected":[3,true,true],"passed":false},{"actual":[3,true,true],"check":"above tie round","expected":[3,true,true],"passed":true},{"actual":[2,true,false],"check":"below half","expected":[2,true,false],"passed":true},{"actual":[-3,true,true],"check":"nearest away","expected":[-3,true,true],"passed":true},{"actual":[2,true,true],"check":"up positive","expected":[2,true,true],"passed":true},{"actual":[-1,true,false],"check":"up negative","expected":[-1,true,false],"passed":true},{"actual":[-2,true,true],"check":"down negative","expected":[-2,true,true],"passed":true},{"actual":[1,true,false],"check":"down positive","expected":[1,true,false],"passed":true},{"actual":[-1,true,false],"check":"truncate","expected":[-1,true,false],"passed":true},{"actual":[1,false,false],"check":"exact","expected":[1,false,false],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"tie even\", \"actual\": [2, true, false], \"expected\": [2, true, false], \"passed\": true}, {\"check\": \"tie odd\", \"actual\": [4, true, true], \"expected\": [4, true, true], \"passed\": true}, {\"check\": \"above tie sticky\", \"actual\": [2, true, false], \"expected\": [3, true, true], \"passed\": false}, {\"check\": \"above tie round\", \"actual\": [3, true, true], \"expected\": [3, true, true], \"passed\": true}, {\"check\": \"below half\", \"actual\": [2, true, false], \"expected\": [2, true, false], \"passed\": true}, {\"check\": \"nearest away\", \"actual\": [-3, true, true], \"expected\": [-3, true, true], \"passed\": true}, {\"check\": \"up positive\", \"actual\": [2, true, true], \"expected\": [2, true, true], \"passed\": true}, {\"check\": \"up negative\", \"actual\": [-1, true, false], \"expected\": [-1, true, false], \"passed\": true}, {\"check\": \"down negative\", \"actual\": [-2, true, true], \"expected\": [-2, true, true], \"passed\": true}, {\"check\": \"down positive\", \"actual\": [1, true, false], \"expected\": [1, true, false], \"passed\": true}, {\"check\": \"truncate\", \"actual\": [-1, true, false], \"expected\": [-1, true, false], \"passed\": true}, {\"check\": \"exact\", \"actual\": [1, false, false], \"expected\": [1, false, false], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.393,"exit_code":0,"observations":[{"actual":[2,true,false],"check":"tie even","expected":[2,true,false],"passed":true},{"actual":[4,true,true],"check":"tie odd","expected":[4,true,true],"passed":true},{"actual":[3,true,true],"check":"above tie sticky","expected":[3,true,true],"passed":true},{"actual":[3,true,true],"check":"above tie round","expected":[3,true,true],"passed":true},{"actual":[2,true,false],"check":"below half","expected":[2,true,false],"passed":true},{"actual":[-3,true,true],"check":"nearest away","expected":[-3,true,true],"passed":true},{"actual":[2,true,true],"check":"up positive","expected":[2,true,true],"passed":true},{"actual":[-1,true,false],"check":"up negative","expected":[-1,true,false],"passed":true},{"actual":[-2,true,true],"check":"down negative","expected":[-2,true,true],"passed":true},{"actual":[1,true,false],"check":"down positive","expected":[1,true,false],"passed":true},{"actual":[-1,true,false],"check":"truncate","expected":[-1,true,false],"passed":true},{"actual":[1,false,false],"check":"exact","expected":[1,false,false],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"tie even\", \"actual\": [2, true, false], \"expected\": [2, true, false], \"passed\": true}, {\"check\": \"tie odd\", \"actual\": [4, true, true], \"expected\": [4, true, true], \"passed\": true}, {\"check\": \"above tie sticky\", \"actual\": [3, true, true], \"expected\": [3, true, true], \"passed\": true}, {\"check\": \"above tie round\", \"actual\": [3, true, true], \"expected\": [3, true, true], \"passed\": true}, {\"check\": \"below half\", \"actual\": [2, true, false], \"expected\": [2, true, false], \"passed\": true}, {\"check\": \"nearest away\", \"actual\": [-3, true, true], \"expected\": [-3, true, true], \"passed\": true}, {\"check\": \"up positive\", \"actual\": [2, true, true], \"expected\": [2, true, true], \"passed\": true}, {\"check\": \"up negative\", \"actual\": [-1, true, false], \"expected\": [-1, true, false], \"passed\": true}, {\"check\": \"down negative\", \"actual\": [-2, true, true], \"expected\": [-2, true, true], \"passed\": true}, {\"check\": \"down positive\", \"actual\": [1, true, false], \"expected\": [1, true, false], \"passed\": true}, {\"check\": \"truncate\", \"actual\": [-1, true, false], \"expected\": [-1, true, false], \"passed\": true}, {\"check\": \"exact\", \"actual\": [1, false, false], \"expected\": [1, false, false], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}