Almost every program considers $\frac{1}{0}$ as $+\infty$ and $-\frac{1}{0}$ as $-\infty$ according to the IEEE 754 floating-point standard. Thus $\pm\infty\cdot 0=\pm\frac{1}{0}\cdot 0=\pm\frac{0}{0}=\text{NaN} $.
Some programs also consider $\log(0)$ as $-\infty$ according to:
$$ \lim_{x\to 0^+}\log(x)=-\infty $$
For these programs, $0\log(0)=0\cdot -\infty=\text{NaN}$. For those programs which consider $\log(0)$ as $\text{NaN}$, $0\log(0)=0\cdot\text{NaN}=\text{NaN}$.
Then, for $\log(0^0)$, all programs will calculate $x=0^0$ first before calculating $\log(x)$. So the last question is why $0^0=1$, or why calling $\text{pow(0,0)}$ will return $1$. Again, according to the IEEE 754 floating-point standard, the "pow" function is combined with the "pown" function and the "powr" function (Wiki: Zero to the power of zero):
- pown (whose exponent is an integer, discrete exponent) treats $0^0$ as $1$.
- powr treats $0^0$ as $\text{NaN}$ due to the indeterminate form.
So which one does the "pow" function use? Well, it depends on implementation.
Some programs will convert float numbers to integers as soon as possible to simplify calculation. In these programs, even if you deliver $0.0$ as the exponent parameter, it will be converted to the integer $0$ first, then the program switch to the "pown" function for calculating. In this situation, you will get $1$ by calculating $0^0$.