{"abstract":"Inverse sine omits the large-input factor of two.","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=2*math.log(a) still violates the explicit regression fixtures.","family":"s3-floating_point_arithmetic-asinh-stable-log-two","id":"FA-16241","implementations":{"attempt":{"sha256":"22aab3dadb30ef4c143876f2f1ea6a1904444a4085b215ae0f761081a93270f5","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=2*math.log(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"},"broken":{"sha256":"7b36822c976aae7b7682f30b2b0015dd5f7d9024a2d8499a7ee92a4779643c54","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)\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-log-two","generated_at":"2026-09-29T14:39:34.586486+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 omits the large-input factor of two. The faulty expression is result=math.log(a).","sha256":"b588e2071ba50e2ca80a88c497bf5e4a3afc50f0b0af2303c4a1e60e411227ef","title":"Inverse sine omits the large-input factor of two · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.812,"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":"1381.5510558","check":"large","expected":"691.46867508","passed":false},{"actual":"-1381.5510558","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\": \"1381.5510558\", \"expected\": \"691.46867508\", \"passed\": false}, {\"check\": \"negative large\", \"actual\": \"-1381.5510558\", \"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":41.902,"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":"690.7755279","check":"large","expected":"691.46867508","passed":false},{"actual":"-690.7755279","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\": \"690.7755279\", \"expected\": \"691.46867508\", \"passed\": false}, {\"check\": \"negative large\", \"actual\": \"-690.7755279\", \"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":41.774,"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"}