At first I couldn't figure out how to compile that on Windows, so I ported it to C#.
Then, I wanted something to compare the output of my program against, so I figured out how to compile yours on Windows in Visual Studio.
They produce the same output, if you ignore a difference in rounding, but the output from my .csv file apparently fails to produce a valid .arb file, while .csv files created by ArbExpress work fine. They're both full of values between -1 and 1, inclusive, and they're both 16384 points. Not sure what's up.
Anyway, I was able to get the siggen in the DS1000Z-S to go well beyond 25MHz this way, which is what I wanted.