This isn't strange at all. You are asking the Symbolic Engine to examine all floating point expressions involving pi, which isn't even represented exactly in IEEE floating point, and extract the pi part. There are an infinite number of such expressions, of course, so you can't expect the Symbolic Engine to get them all. As such, it only gets the simple ones. E.g.,
sym(4*pi)
ans = sym(pi/3)
ans =
sym(pi^2)
ans =
sym(pi)^2
ans = sym(exp(1))
ans =
sym(exp(1)/3)
ans =
exp(sym(1))/3
ans =
sym(pi*exp(1))
ans =
sym(pi)*exp(sym(1))
ans = The solution, as you have already discovered, is to insert symbolic constants up front rather than passing results of floating point expressions to the Symbolic Engine and expecting it to divine the source in all cases. Even the simple expressions have a limit for when the Symbolic Engine stops looking. E.g.,
sym(pi/100000)
ans =
sym(pi/100001)
ans =