They were added to the Framework much later than the other types.
So at some point, some team at Microsoft is creating these two types, and they have to make a decision: do we add them to an existing DLL, e.g. mscorlib.dll or System.dll, or do we put them into a new DLL.
I'm sure they considered all the pro's and con's.
Here are a few possible arguments in favor of the decision to put them into a separate assembly:
- they are rarely needed. Why increasing the size of an existing assembly with types that are rarely needed?
- Other people might have Implemented types called
BigInteger
andComplex
. By not adding our implementation into an existing assembly, we are less likely to create problems for them (i.e. break their build). - By putting them into a separate assembly, we can have a separate release cycle. We do not have to wait for the next release of the .NET Framework to release this assembly.
I am aware of the fact that all these arguments have counterarguments, but they did decide to create a separate assembly. As for the actual reasons, you would have to ask the team in question. That being said, many teams ask themselves the same question every time they want to add a type. The above points are often on the list of arguments considered.