{"abstract":"Inverse sine squares a huge magnitude before taking its logarithm.","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.","evaluation_group":"s3-float-asinh-stable","failed_approach":"The attempted local correction result=math.log(min(a+math.sqrt(1+a*a),1e308)) still violates the explicit regression fixtures.","family":"s3-floating_point_arithmetic-asinh-stable-large-product","id":"FA-16236","implementations":{"attempt":{"sha256":"d5de5e2fa643c6eb67c6a14513c4853fe4061ed821e087a5580bfea3a697ce3c","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(x)\n        if a>1e150:\n            result=math.log(min(a+math.sqrt(1+a*a),1e308))\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":"cdd1e6b38511909e4c7e1be0d75a2c17814c6bc940830ec7b433b443d9d45102","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(x)\n        if a>1e150:\n            result=math.log(a+math.sqrt(1+a*a))\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"},"fixed":{"sha256":"63b2caefba5e573952c603b31c9fbd968c653bd31fa97b5a6acc0ceaedc2a138","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(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-large-product","generated_at":"2026-09-29T14:39:34.404314+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 result=math.log(a)+math.log(2).","root_cause":"Inverse sine squares a huge magnitude before taking its logarithm. The faulty expression is result=math.log(a+math.sqrt(1+a*a)).","sha256":"39f27f18a6c97a87fa36b7fd54964e8d1f0375544f00352018b721027efcd3ae","title":"Inverse sine squares a huge magnitude before taking its logarithm · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.948,"exit_code":1,"observations":[{"actual":"8.6736173799e-19","check":"tiny","expected":"8.6736173799e-19","passed":true},{"actual":"-8.6736173799e-19","check":"negative tiny","expected":"-8.6736173799e-19","passed":true},{"actual":"709.19620864","check":"large","expected":"691.46867508","passed":false},{"actual":"-709.19620864","check":"negative large","expected":"-691.46867508","passed":false},{"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":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"tiny\", \"actual\": \"8.6736173799e-19\", \"expected\": \"8.6736173799e-19\", \"passed\": true}, {\"check\": \"negative tiny\", \"actual\": \"-8.6736173799e-19\", \"expected\": \"-8.6736173799e-19\", \"passed\": true}, {\"check\": \"large\", \"actual\": \"709.19620864\", \"expected\": \"691.46867508\", \"passed\": false}, {\"check\": \"negative large\", \"actual\": \"-709.19620864\", \"expected\": \"-691.46867508\", \"passed\": false}, {\"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\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.41,"exit_code":1,"observations":[{"actual":"8.6736173799e-19","check":"tiny","expected":"8.6736173799e-19","passed":true},{"actual":"-8.6736173799e-19","check":"negative tiny","expected":"-8.6736173799e-19","passed":true},{"actual":"+infinity","check":"large","expected":"691.46867508","passed":false},{"actual":"-infinity","check":"negative large","expected":"-691.46867508","passed":false},{"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":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"tiny\", \"actual\": \"8.6736173799e-19\", \"expected\": \"8.6736173799e-19\", \"passed\": true}, {\"check\": \"negative tiny\", \"actual\": \"-8.6736173799e-19\", \"expected\": \"-8.6736173799e-19\", \"passed\": true}, {\"check\": \"large\", \"actual\": \"+infinity\", \"expected\": \"691.46867508\", \"passed\": false}, {\"check\": \"negative large\", \"actual\": \"-infinity\", \"expected\": \"-691.46867508\", \"passed\": false}, {\"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\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.451,"exit_code":0,"observations":[{"actual":"8.6736173799e-19","check":"tiny","expected":"8.6736173799e-19","passed":true},{"actual":"-8.6736173799e-19","check":"negative tiny","expected":"-8.6736173799e-19","passed":true},{"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":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"tiny\", \"actual\": \"8.6736173799e-19\", \"expected\": \"8.6736173799e-19\", \"passed\": true}, {\"check\": \"negative tiny\", \"actual\": \"-8.6736173799e-19\", \"expected\": \"-8.6736173799e-19\", \"passed\": true}, {\"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\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}