{"abstract":"Inverse sine uses a cancellation-prone logarithm for tiny inputs.","category":"Floating-point arithmetic","checks":7,"contract":"Evaluate inverse hyperbolic sine for finite binary64 values with tiny-value preservation and a large-value logarithmic branch. Finite results are rendered to eleven significant decimal digits; modeled domain violations and arithmetic errors are explicit strings.","contract_signature":"x","evaluation_group":"s3-float-asinh-stable","failed_approach":"The attempted local correction if a<1e-8: return \"0\" still violates the explicit regression fixtures.","family":"s3-floating_point_arithmetic-asinh-stable-tiny-erasure","id":"FA-16231","implementations":{"attempt":{"sha256":"66932e9669ce4d685524d026572b63c3c1a2986095a8bc3c2dde56127ab01048","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nimport struct\ndef render(x):\n    if math.isnan(x): return 'nan'\n    if math.isinf(x): return '-infinity' if x<0 else '+infinity'\n    return format(x,'.11g')\n\nN = 1\nobservations = []\ndef solve(x):\n    try:\n        a=abs(x)\n        if a<1e-8: return \"0\"\n        if a>1e150:\n            result=math.log(a)+math.log(2)\n        else:\n            result=math.log1p(a+a*a/(1+math.sqrt(1+a*a)))\n        return render(math.copysign(result,x))\n    except (ValueError, OverflowError, ZeroDivisionError, TypeError):\n        return \"arithmetic-error\"\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('tiny', solve(N*2.0**-60), render(N*2.0**-60))\ncheck('negative tiny', solve(-N*2.0**-60), render(-N*2.0**-60))\ncheck('large', solve(N*1e300), render(math.asinh(N*1e300)))\ncheck('negative large', solve(-N*1e300), render(math.asinh(-N*1e300)))\ncheck('normal', solve(float(N)), render(math.asinh(N)))\ncheck('negative normal', solve(-float(N)), render(math.asinh(-N)))\ncheck('negative zero', solve(-0.0), \"-0\")\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":"08c7b161a1b2c88c125ce1a879e61aeaecebccd61842c17a7ff1183a9b98733f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nimport struct\ndef render(x):\n    if math.isnan(x): return 'nan'\n    if math.isinf(x): return '-infinity' if x<0 else '+infinity'\n    return format(x,'.11g')\n\nN = 1\nobservations = []\ndef solve(x):\n    try:\n        a=abs(x)\n        if a<1e-8: return render(math.log(x+math.sqrt(1+x*x)))\n        if a>1e150:\n            result=math.log(a)+math.log(2)\n        else:\n            result=math.log1p(a+a*a/(1+math.sqrt(1+a*a)))\n        return render(math.copysign(result,x))\n    except (ValueError, OverflowError, ZeroDivisionError, TypeError):\n        return \"arithmetic-error\"\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('tiny', solve(N*2.0**-60), render(N*2.0**-60))\ncheck('negative tiny', solve(-N*2.0**-60), render(-N*2.0**-60))\ncheck('large', solve(N*1e300), render(math.asinh(N*1e300)))\ncheck('negative large', solve(-N*1e300), render(math.asinh(-N*1e300)))\ncheck('normal', solve(float(N)), render(math.asinh(N)))\ncheck('negative normal', solve(-float(N)), render(math.asinh(-N)))\ncheck('negative zero', solve(-0.0), \"-0\")\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-asinh-stable-tiny-erasure","generated_at":"2026-09-29T14:39:34.705045+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":"Inverse sine uses a cancellation-prone logarithm for tiny inputs. The faulty expression is if a<1e-8: return render(math.log(x+math.sqrt(1+x*x))).","sha256":"7a1619c284a63f3160153308e88ed3a1b1a8585008be7e84222636f5c083f53b","title":"Inverse sine uses a cancellation-prone logarithm for tiny inputs · 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.283,"exit_code":1,"observations":[{"actual":"0","check":"tiny","expected":"8.6736173799e-19","passed":false},{"actual":"0","check":"negative tiny","expected":"-8.6736173799e-19","passed":false},{"actual":"691.46867508","check":"large","expected":"691.46867508","passed":true},{"actual":"-691.46867508","check":"negative large","expected":"-691.46867508","passed":true},{"actual":"0.88137358702","check":"normal","expected":"0.88137358702","passed":true},{"actual":"-0.88137358702","check":"negative normal","expected":"-0.88137358702","passed":true},{"actual":"0","check":"negative zero","expected":"-0","passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"tiny\", \"actual\": \"0\", \"expected\": \"8.6736173799e-19\", \"passed\": false}, {\"check\": \"negative tiny\", \"actual\": \"0\", \"expected\": \"-8.6736173799e-19\", \"passed\": false}, {\"check\": \"large\", \"actual\": \"691.46867508\", \"expected\": \"691.46867508\", \"passed\": true}, {\"check\": \"negative large\", \"actual\": \"-691.46867508\", \"expected\": \"-691.46867508\", \"passed\": true}, {\"check\": \"normal\", \"actual\": \"0.88137358702\", \"expected\": \"0.88137358702\", \"passed\": true}, {\"check\": \"negative normal\", \"actual\": \"-0.88137358702\", \"expected\": \"-0.88137358702\", \"passed\": true}, {\"check\": \"negative zero\", \"actual\": \"0\", \"expected\": \"-0\", \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.859,"exit_code":1,"observations":[{"actual":"0","check":"tiny","expected":"8.6736173799e-19","passed":false},{"actual":"0","check":"negative tiny","expected":"-8.6736173799e-19","passed":false},{"actual":"691.46867508","check":"large","expected":"691.46867508","passed":true},{"actual":"-691.46867508","check":"negative large","expected":"-691.46867508","passed":true},{"actual":"0.88137358702","check":"normal","expected":"0.88137358702","passed":true},{"actual":"-0.88137358702","check":"negative normal","expected":"-0.88137358702","passed":true},{"actual":"0","check":"negative zero","expected":"-0","passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"tiny\", \"actual\": \"0\", \"expected\": \"8.6736173799e-19\", \"passed\": false}, {\"check\": \"negative tiny\", \"actual\": \"0\", \"expected\": \"-8.6736173799e-19\", \"passed\": false}, {\"check\": \"large\", \"actual\": \"691.46867508\", \"expected\": \"691.46867508\", \"passed\": true}, {\"check\": \"negative large\", \"actual\": \"-691.46867508\", \"expected\": \"-691.46867508\", \"passed\": true}, {\"check\": \"normal\", \"actual\": \"0.88137358702\", \"expected\": \"0.88137358702\", \"passed\": true}, {\"check\": \"negative normal\", \"actual\": \"-0.88137358702\", \"expected\": \"-0.88137358702\", \"passed\": true}, {\"check\": \"negative zero\", \"actual\": \"0\", \"expected\": \"-0\", \"passed\": false}], \"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."}}