少数点以下の桁数を有効桁数で割る前にチェックするには

解決


masat21  2005-09-18 09:15:58  No: 59086

masat21です。
現在100000の値に対し、1000で割った値100.000の少数点以下の桁数を
1000で割る前にチェックする方法についてご存知の方がいましたら、
ご教示願います。

例を以下に示します。
(1) 100001を1000で割ったときの有効桁数が2の場合-> NG
(2) 100001を1000で割ったときの有効桁数が3の場合-> OK

初歩的な質問ですが、回答よろしくお願いします。


まきじ  2005-09-18 22:35:36  No: 59087

>100000の値に対し、1000で割った値100.000の少数点以下の桁数を
>1000で割る前にチェックする方法

有効桁数をチェックするという事でしょうか?

IEEE754 の場合

float 型なら、小数点以下 約 7 桁が有効桁数。
double 型なら、小数点以下 約 15 桁が有効桁数。


masat21  2005-09-19 18:41:38  No: 59088

回答いただきありがとうございます。
上記の件は大変参考になりますが、
本題で言っている桁数チェックというのは、
VC++ .NETからSQL Serverへデータを書き込む場合の桁数、
つまり、DBにデータを書き込むときにおける桁数チェック
(上下限チェック)のことです。

以前の例で言うと次のようになります。(1000で割ったときの値)
(1) 100.001でDBの精度6でうち有効桁数2の場合 ->NG(オーバーフロー)
(2) 100.001でDBの精度6でうち有効桁数3の場合 ->OK

回答よろしくお願いします。


iijima  2005-09-19 19:55:36  No: 59089

ある値を1000で割った答の小数点以下の桁数を知りたいということでしょうか。

であれば、割られる値をxとしたとき、
xを1000で割ったときの余りが0なら、小数点以下は0桁
そうでなく、100で割ったときの余りが0なら、小数点以下は1桁
そうでなく、10で割ったときの余りが0なら、小数点以下は2桁
そうでないときは、小数点以下は3桁

という判定が一案。


tetrapod  2005-09-19 22:50:44  No: 59090

そもそもな逃がしたいのかはっきり判りませんけどなんとなく妄想。
正しい 100.10 とかに対して  100.09999 とか出てきて、拒絶されてあぢゃぱー
に一票。

そーいう要望に対して double を使っているのであれば設計ミス。
固定小数を使うべし。


masat21  2005-09-20 00:01:43  No: 59091

回答いただきありがとうございます。
tetrapodさんのおっしゃっている内容が正しいです。
※tetrapodさん、妄想ではありませんよ!

初歩的な質問で恐縮ですが、固定小数の使い方についてご教示
いただけると幸いです。Cには固定小数型はなかった記憶があります。

簡単にいうと100001を1000で割る前に、DBの精度の桁数の上下限
チェックがしたいのです。

よろしくお願いします。


tetrapod  2005-09-20 01:16:56  No: 59092

うーん iijima さんの案でいけてるはずなんですけど?
101000 を %1000=0                 ... 小数点の下に0桁ある
100100 を %1000=100 %100=0        ... 小数点の下に1桁ある
100010 を %1000=10  %100=10 %10=0 ... 小数点の下に2桁ある
100001 を %1000=1   %100=1  %10=1 ... 小数点の下に3桁(以上)ある
# 最初に剰余0が出てくるところはどこ?だけで判定可能。
ってそういう話ぢゃない?  これも立派な固定小数点演算だよ。
単に浮動小数点数での除算の前に整数剰余を求めておけばいい。

整数剰余で桁数判定を行った後に浮動小数点数で除算した結果が
100.099999 みたいになるのは別の話。
こっち (桁落ち/精度落ち) の回避の話ですか?

ちなみに「小数点」であって「少数点」ではないのでよろしく。


おどまのぼんたろう  2005-09-20 08:39:35  No: 59093

>簡単にいうと100001を1000で割る前に、DBの精度の桁数の上下限
チェックがしたいのです。

書いてあることがわからない。
10001や1000は固定と言うこと?
だとしたら、プログラム作る必要あるの。
固定でなかったらきちんと条件を明記すべし。
DB云々と書いてあるけど、どこにデータベースが出てきてるの?
データベースが絡むのだったらそれは何のDB?


masat21  2005-09-21 08:47:29  No: 59094

早速会社に行って、実装と確認を行ったところ、
問題なく上下限のチェックができました。
回答いただきありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加