2

私は2つのテーブルを持っています。最初のものはuser_id + いくつかの数値 (double) を持つ数値であり、各 user_id に対して複数の行を持つことができるしましょう。そして、user_id(PRIMARY) + table numbersからのこのユーザーのすべての数字の積を持つ別のユーザーがいます。

レコードがnumberに挿入または削除されると、 users.productを再計算する必要があります。一度に挿入されるレコードは 1 つだけなので、次のクエリで実行できます。

UPDATE users SET product=product*{number} WHERE user_id={some_id}

ただし、レコードが一括で削除されるため、これを行うには醜いコードが必要になります。積を再計算する方が簡単です。しかし、PRODUCTのような機能はありません。使うことができます

exp(sum(log(coalesce(*number*,1)))

しかし、数字の間違った積に終わらないかどうかはわかりません。数値は 1.00 から 9.99 の範囲になります。この方法でどの程度の精度が失われる可能性がありますか?

4

1 に答える 1

2

浮動小数点表現を使用している場合、あなたの質問に対する答えは「はい」です。

一般に、狭い範囲で数値を乗算していて、数が少ない場合、これは問題にはなりません。気になる場合は、数値を固定の10進表現で格納してください。

ログを取得するソリューションは問題ありません。ほとんどのアプリケーションでは、これにより十分な精度が得られます。ただし、火星へのオービターの送信に取り組んでいる場合は、小さなエラーが蓄積される可能性があるため、高精度の数値精度をデータベースに依存するべきではありません。

計算の順序も数値の精度に影響を与える可能性があることに注意してください。

于 2013-01-27T19:55:42.933 に答える