スレを勃てるまでもないC/C++の質問はここで 25 [隔離病棟]©2ch.net (467レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
272: 2018/01/27(土)10:43 ID:BU9rpSw9(1/9) AAS
精度上げたいならdouble使えば?
275: 2018/01/27(土)11:52 ID:BU9rpSw9(2/9) AAS
そういう意味ではPython最強だな
277: 2018/01/27(土)12:07 ID:BU9rpSw9(3/9) AAS
閾値も比較対象も同じ精度なら不都合は起きない気がするけど
不都合が起きるとすると、計算過程での誤差が許容範囲内かどうかってことじゃないの?
どっちにしても無理数はどっが切らないといけないわけだし、扱える有効桁数の範囲で計算するしかない
ちなみに、
float x=1.7320508075688f;
は、代入の時点でfloatの有効桁数を超えてるから表示した時の結果と異なるのは当たり前
doubleだと有効桁数が15〜16桁程度ある。それでも不足なら、long doubleを使うとか、decimal型
を扱う外部ライブラリを使うとか
280: 2018/01/27(土)14:34 ID:BU9rpSw9(4/9) AAS
そもそも、 1.732050776f と言う書き方が矛盾してでしょ
末尾にfをつけてるから、floatに変換してるわけだけど、1.732050776 はfloatの有効桁数を超えた表現だからこの比較自体がおかしい
1.732050776 と比較したかったらdoubleで計算すればいいし、もっと大きな有効桁数を求めるなら、long doubleなり、decimal型を扱えるライブラリでも使えばいい
284(1): 2018/01/27(土)15:18 ID:BU9rpSw9(5/9) AAS
>>281
√3との比較対象となる計算結果も、floatなりdoubleなりを使う計算過程で桁落ちは発生するでしょ? そっちは問題ないの?
閾値となる√3の桁落ちだけが問題?
なんにしろ、√3みたいな無理数を扱う場合は、有効桁数何桁、少数点以下何桁まで考慮するという前提がないと、それを扱う型の精度も決められないし、それがデータ設計者の役目だと思うけど
286: 2018/01/27(土)15:28 ID:BU9rpSw9(6/9) AAS
>>285
√3と言うのは例として上げただけで平方根とは限らないみたいだよ
291(1): 2018/01/27(土)17:02 ID:BU9rpSw9(7/9) AAS
>>290
32ビットfloatの有効桁数は7桁しかないよ
√3は、小数部6桁の1.732051 までしか表現できないし、
例えば整数部の最大を4桁としたら、小数部は3桁までしか使えない
大丈夫?
299(1): 2018/01/27(土)19:52 ID:BU9rpSw9(8/9) AAS
>>298
floatの有効桁数は7桁だから
float x=1.7320508075688;
とするんじゃなくて、
float x = 1.732051;
とするしかないでしょ
それが嫌なら、もっと精度の高いdoubleを使うようにして
省7
305: 2018/01/27(土)21:11 ID:BU9rpSw9(9/9) AAS
>>302
floatの丸め方が知りたかったの?
round、floor, ceil とかあるじゃん
例えば、double型の小数部第6位で切り捨ててfloat型へ代入したければ、ありがちなやり方としては
double d = 1.7320508075688;
float f = floor(d * 100000.0) / 100000.0;
んな感じで
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.026s