I thought long and hard about the 64-bit version of FTN95. It is abundantly clear that Microsoft intends that the 64-bit version of Windows becomes the default, since it is installed on the majority of laptops for example, even those with soldered RAM of 2Gb that is not expandable.
The fundamental difference between 32-bit and 64-bit version of the compiler lies predominantly in the size of data structures (singly and together) that can be addressed. Whether or not one has single arrays that exceed 4Gb in length, a two-dimensional or more array can exceed the 4 GB length without individual array dimensions exceeding the capacity of INTEGER*4. Although notionally 4Gb is the limit, in 32-bit mode the limit is probably a lot smaller, around 2Gb by the time one has considered the operating system and the addressing limits of that.
It is sometime since I last looked at the pricing of a super-capacity PC, and I did so recently discovering that a mainboard and CPU could cost respectively GBP300 and GBP600, and that such a mainboard would support 128GB of RAM at a cost of about GBP1350. By the time one considers the other components, one is considering spending GBP3k on a system. It is definitely a function of need, because a tablet with Sparc Station capabilities can be had for under GBP50!
128Gb of RAM could support 64 2Gb data structures, or 32 at 4Gb, with this super specification, and as it is likely that one or a few of those arays will take up most of that RAM, a 64-bit compiler needs only consider that a few data structures will be used in any program. Even with the likely future developments it is rather improbable that the average Windows user will boast that level of RAM for some years to come. Indeed, my observation is that many machines are far less well-equipped because size, weight, and battery life are where technical innovations being made fastest.
That brings me to FTN95 64-bit, which is far as I can tell is a completely new product rather than an evolution of the 32-bit version. I can see why users who need the larger data structures would sacrifice everything for speed, as cranking through those huge data structures is inevitably time-consuming. I can see how using the SSEx instructions helps vs. x87 instructions. However, the whole point of the x87 extended-to-80-bit arithmetic is to reduce round off error. The switch to SSEx will ensure that some numerical procedures actually yield different answers. This takes me back some 35 years to Microsoft Fortran which had different libraries for coprocessor arithmetic and coprocessor emulation, and the two versions decidedly gave different answers: huge differences in cases where single precision arithmetic was done.
I recently came across a situation where an application (not in FTN95, but in some Pascal variant) produced quite different results for its single precision DOS version to those of its double precision Windows version. A very contentious issue when reviewing analysis and design in the course of a litigation.
It struck me that if FTN95 32-bit and 64-bit versions are completely or largely separate, and have therefore the potential to produce different results, there could be some quite unhappy users. This is compounded by the fact that many coders while professing an understanding of round off do not genuinely understand every issue. I include myself in this. I’m not even sure that all computer scientists fully understand it. For example, FTN95 issues a warning for comparing floating point numbers when it is obvious that a comparison to 0 is not attempting to trap the result of the floating point operations that yield exactly 0, but is instead picking up errors in data input that could lead to a numerical overflow. It is better to trap this with an IF statement and exit gracefully rather than put up with an FTN95 error. I appreciate that to Silverfrost, the error message is graceful exit, but it certainly isn’t to an end-user!
The actual arithmetic need not be any different between a 32-bit and a 64-bit version of the compiler, and it strikes me that for continuity the default for 64-bit FTN95 should remain x87. If anything, SSEx should be encapsulated in an optimisation option with a clear caveat that this has the potential to give different round offs and therefore ultimately different results.
I fully expect to be in a minority of one, but the issue is worth airing. As for me, I recognise that once one ties oneself into Windows, then outright speed ceases to be meaningful in the way it does with for example DOS. Moreover, FTN95 is adequately fast for speed not to be an issue in the applications I write.
Silverfrost must take a commercial viewpoint, but I will point out that the value of the litigation I mentioned was such that had the software provider been sucked in for even a small faction of the sums at stake, they would have been bankrupted.
Eddie