計算がおかしい?

4D v17.1でテストプログラムを書いていて、数値計算がおかしいのを発見しました。
コレクションに入っているオブジェクトの単価と数量を掛けたものを集計しようとしたのですが

$sum:=0
For each ($item;[売上伝票]明細.meisai)
$sum:=$sum+$item.amount*$item.price
End for each

と書いて実行すると$sumの値がおかしくなります。

$sum:=$sum+($item.amount*$item.price)

と掛け算を括弧でくくるとちゃんと計算できます。

ちなみに$sumの定義をC_REAL($sum)に変更しても同じ結果でした。

動きを動画でキャプチャーしたものを限定公開でYouTubeにアップしていますので、数値がどう変化しているかを確認していただけたらと思います。

プログラミング言語の演算子は,算術と一緒ではなく,実装依存となっています。

$sum:=$sum+$item.amount*$item.price

  • が + よりも優先される実装もありますし,
    左から右に向かって計算する言語もあります。

4Dは後者です。

https://doc.4d.com/4Dv16/4D/16.5/Operators.300-4226969.ja.html

なるほど、そういうことだったんですね。
ちゃんとトレースして試していたら気づくようなことを投稿してしまい申し訳ありませんでした。