The function at issue:
fa[a_] = 99999.99999999999` (-426.3417145941241` + 2.25` a -
2.25` a Erf[
99999.99999999999` (0.4299932790728411` -
0.18257418583505533` Log[a])] +
23.714825526419478` Erf[
99999.99999999999` (0.42999327934670234` -
0.18257418583505533` Log[a])]) +
9.999999999999998`*^9 a^3.1402269146507883`*^9 E^(
9.999999999999998`*^9 (-0.36978844033114555` -
0.06666666666666667` Log[a]^2)) (a E^(
1.8749999999999996`*^10 (0.3140226915650789` -
0.13333333333333333` Log[a])^2) (0.24259772920294995` -
0.10300645387285048` Log[a]) +
E^(1.8749999999999996`*^10 (-0.3140226913650789` +
0.13333333333333333` Log[a])^2) (-2.556961252217486` +
1.085680036306589` Log[a]));
Build and plot the function - show it is not always zero and there is one root.
dataa = {#, fa[#]} & /@ Range[1, 1000, 10];
imagea = Plot[fa[a], {a, 0, 400}, Epilog -> {Red, PointSize[0.005], Point[dataa]}];
imagea
FindRoot is able to find the root - only if searching from above:
FindRoot[fa[a] == 0, {a, 10^10}]
{a -> 100.013}
Show that FullSimplify returns zero - with no warning:
Assuming[a > 0, FullSimplify[fa[a]]]
0.
The following consumes all memory, then thrashes the swap space.
The only way to interrupt was:
alt+ctl+sysrq+REISUB.
FindInstance[fa[a] == 0 && a > 0, {a}, Reals]
Does anyone observe the same behavior?
Is this expected or should be reported as a bug?
System Information:
SystemInformationData[{"Kernel" -> {
"Version" -> "11.3.0 for Linux x86 (64-bit) (March 7, 2018)",
"ReleaseID" -> "11.3.0.0 (5944640, 2018030701)",
"PatchLevel" -> "0",
"MachineType" -> "PC",
"OperatingSystem" -> "Unix",
"ProcessorType" -> "x86-64",
"Language" -> "English",
"CharacterEncoding" -> "UTF-8",
"SystemCharacterEncoding" -> "UTF-8"
...
"Machine" -> {"MemoryAvailable" ->
Quantity[11.852828979492188, "Gibibytes"],
"PhysicalUsed" -> Quantity[5.171413421630859, "Gibibytes"],
"PhysicalFree" -> Quantity[10.363525390625, "Gibibytes"],
"PhysicalTotal" -> Quantity[15.53493881225586, "Gibibytes"],
"VirtualUsed" -> Quantity[5.171413421630859, "Gibibytes"],
"VirtualFree" -> Quantity[14.234615325927734, "Gibibytes"],
"VirtualTotal" -> Quantity[19.406028747558594, "Gibibytes"],
"PageSize" -> Quantity[4., "Kibibytes"],
"PageUsed" -> Quantity[3.8710899353027344, "Gibibytes"],
"PageFree" -> Quantity[0, "Bytes"],
"PageTotal" -> Quantity[3.8710899353027344, "Gibibytes"],
"Active" -> Quantity[3.342662811279297, "Gibibytes"],
"Inactive" -> Quantity[1.4980888366699219, "Gibibytes"],
"Cached" -> Quantity[1.8926506042480469, "Gibibytes"],
"Buffers" -> Quantity[225.7890625, "Mebibytes"],
"SwapReclaimable" -> Quantity[96.015625, "Mebibytes"]}}]

fa? – Rohit Namjoshi Jan 14 '20 at 04:36FindInstancecripples your system. – Hedgehog Jan 14 '20 at 07:51FullSimplifyreturns0.without any warning or error? Is this for the same MM version I report (11.3)? – Hedgehog Jan 14 '20 at 08:03FindInstancethere is this commandAssuming[a > 0, FullSimplify[fa[a]]]. Which returns zero. I'm referring to that command. I also cite this in the subject line. – Hedgehog Jan 14 '20 at 11:12Simplify[fa[a]]is simpler example that returns zero. – Michael E2 Jan 14 '20 at 16:57FindRootworks for lower values of the starting point for me, greater than around 10.7 below which the derivative suffers from underflow.FindRoot[fa[a] == 0, {a, 1}, WorkingPrecision -> $MachinePrecision]fixes that. I take it the main question is why doesSimplifyreturn an unreliable answer? – Michael E2 Jan 14 '20 at 17:07FullSimplifyis almost certainly due to underflow-to-zero. It remains as a known problem without a clear solution. One path would be to force all approximate numbers inside polynomial algebra functions to be bignums (that is,$MachinePrecisioninstead ofMachinePrecision, for those familiar with the distinction). This seems draconian but might be the best tack for us to take. – Daniel Lichtblau Jan 14 '20 at 23:02Correct.
– Hedgehog Jan 18 '20 at 22:46