When I run following code with VisualDSP++ and MS Visual Studio, I'm seeing different resuls.

double d =12245001;

d = d / 1000.0; // VisualDSP = 12245

// VisualStudio = 12245.001

long long l = 4294967296; //this is 2^32

d = d * (double)(l); // VisualDSP = 52598178733824

// VisualStudio = 52591878834487

It seems VisualDSP++ has an issue with float accuracy. What is wrong here?

The behaviour you are seeing is due to the way floating point numbers are represented. You cannot represent a floating point number exactly; you only store an approximation of it. The general rule is that, for 32-bit floating point numbers, you can get an accuracy of approx 7 significant figures (on some occasions you may see 8 significant digits). so, 12245.001 to seven significant digits is 12245.00, and the larger number to 7 digits is 5259817xxxxxx (where the x's are digits the VisualDSP++ will approximate to truncate the value to the full number of digits). The Windows environment in which the Visual Studio example is running uses a greater number of bits to represent floats, so can be more accurate, and hence has to truncate less digits to approximate the value.

Note that the VisualDSP++ Expressions window is typically accurate to 7 digits, while the memory windows will truncate to 8 significant figures.