追記
ねこさん、もしかしてこういうことしませんでしたか?
dim a,2,2,2
a(0,0,0) = 1
a(1,1,1) = 2
a = double(a) //変換! (←しかし、そんなうまい話はない(笑))
double() にしても int() にしてもそうですが、
double(a) のようにaの添え字(a(17)等の数字 17 のこと)を省略した場合、aの先頭(つまりインデックス0)の値が操作対象として選ばれます。
もしaが多次元配列ならa(0,0,0)のように、とにかくaの占める主記憶領域の先頭の値が対象になります。
(HSPインタプリタのコードを読んだわけではないですが、経験的にそういう動作だと思っています)
これは代入の時も同じであって、
a = 1,2,3
a = 4
とすれば a = 4,2,3 となっているはずです。
しかしながら、
a = 1,2,3
a = 4.0
こうすると a は もはや配列ではなくなり a = 4.0 となります。
配列の要素は全て同じ型でなくてはならない(そうしないと管理が非常に面倒になる)というルールがありますから、
HSPインタプリタは2行目で仕方なく a を一旦クリアしてdouble型の変数として初期化したわけです。
これらのことから、
a = double(a)
などということを配列変数に対して行っても、ねこさんの期待していたようにはならないわけです。