No.4ベストアンサー
- 回答日時:
log() の使い方がわからなければ、log() を使う必要はありません。
回答にも書いたように、(無限精度の実数で無く)double なら、300回ちょっとのかけ算(or 割り算)なので、気にするほどの計算量ではありません。
それによく考えたら、log() を使って、指数部分を計算したにしても、仮数部分を正規化するのに、やっぱり、その回数だけ、かけたり割ったりが必要なので、実質的にはほとんど意味が無いですね。
> 仮数部分を正規化するのに、やっぱり、その回数だけ、かけたり割ったりが必要
そうなのですか。結局のところ大量の乗算は必須なようですね。
納得しました。ありがとうございます。
No.3
- 回答日時:
No.2 です。
No.2 のロジックだと、別に、最高のハードなど必要なく、浮動小数点演算ができる(ライブラリでも)機能があれば十分です。
また、このロジックだと、log() をとることによる誤差は本質的にありません。
演算時間も、log() を1回とるだけなので、全く問題になりません。
ロジックが理解できれば、こういう点での質問は出ないと思うのですが。
あと、確かに(少なくとも最初の)最適化は、仮数部分を 1未満 0.1以上ですね。
No.2
- 回答日時:
log までとれるような環境なら、数値としての演算はできるのですよね?
1) 浮動小数点が、正数・負数・ゼロ のいずれかを判断して、(符号を覚えた上で)正数にする。
2) さらに、0 以上 1 未満になるように、10 をかけるか、10で割る(かけたり割ったりした回数は覚えておく)
3) 前項で、かけたり割ったりした回数が、10進数表記における、指数部分。
ここまでで、指数部分は完成。
double でも、たかだか、300回ちょっとで計算は終わる。
なお、log() (底が10) を使うと、2) と 3) の繰り返し計算がなくても、一発で、
指数部分が算出可能。
以下、仮数部分。
1) 仮数は、0 以上 1 未満に正規化されていると仮定する。
2) 10倍すると、(10進数表記で)小数点以下一桁の数値が、整数部分に出てくる。
3) 整数部分が、小数点以下一桁になる。
4) 整数部分を引く
5)それを10倍すると、本来の数字の小数点以下二桁目が整数部分にでてくる。
6) 以下、必要な精度だけそれを繰り返す。
※もちろん、算出できた指数部分とか、仮数部分の桁は、ちゃんと文字に変換する。
おまけ。
http://www.nest4.net/tec/strnum.html
(ただし、ここで説明しているルーチンは、変換結果を指数表示するようにはなっていません)
回答ありがとうございます。
思えば環境はあまり具体的に考えていませんでした。考える上で必要なら、現在最高のハードウェアということでお願いします。
> 0 以上 1 未満になるように、10 をかけるか、10で割る
なるほど、10進数の方で2の冪乗を計算することを考えていましたが、2進数に10を掛けた方が速そうですね。
ただ小数になると2進数は10で割れないので10進数で計算した方がよさそうです。
> log
必要な精度が得られるのか、および計算時間について詳しく分かりませんか?
仮数部分については流れがよく分かりました。
正規化は0.1以上1未満ですよね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c languageで 簡単な質問があ...
-
O(n log n)について2
-
有効数字について 以前質問をし...
-
計算が合わない
-
EXCELの関数"STDEV(標準偏差)"...
-
VisualBasic と Fortran の計算...
-
除算を使わずに10で割りたい。
-
VBAのINT関数について
-
CRCの計算方法について
-
2進数の足し算(C言語)
-
ExcelでPC(パソコン)によって...
-
VB.net Double と...
-
どんな数字を入力してもaverage...
-
VBAでの割り算の余りの求め方
-
ActiveBasic Double(15桁)以...
-
c言語 立方根
-
”/”を使わずに割り算したいんで...
-
コンピューターは指数関数をど...
-
三菱シーケンサ(Aシリーズ)で...
-
浮動小数点演算を固定小数点演...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
O(n log n)について2
-
c languageで 簡単な質問があ...
-
ExcelでPC(パソコン)によって...
-
16進数 加算 減算 C言語
-
ExcelのINT関数の計算結果がお...
-
EXCELの関数"STDEV(標準偏差)"...
-
三菱シーケンサ(Aシリーズ)で...
-
VB.net Double と...
-
除算を使わずに10で割りたい。
-
有効数字について 以前質問をし...
-
BCD・HEX・BINについて
-
C言語でセルオートマトンを作成...
-
VB6.0での小数点の扱いについて
-
VBAでミリ秒まで出力する方法
-
2進数の足し算(C言語)
-
floatの有効桁数
-
”/”を使わずに割り算したいんで...
-
計算の丸め誤差の解消について
-
VB6のFIX関数での誤差について
-
三角比の俯角の計算
おすすめ情報