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で質問しましょう!
似たような質問が見つかりました
- 数学 以下の問題が分かりません。 8ビット浮動小数点数が、最上位ビットから順に符号1ビット、指数部3ビット 4 2023/07/22 16:06
- Excel(エクセル) エクセルのセルの書式設定・ユーザー定義の条件設定について 1 2022/08/17 21:56
- 化学 有効数字の取り扱いについて 高校化学では、測定値同士の計算結果の有効数字は、測定値に合わせるようにな 4 2022/06/30 14:07
- Excel(エクセル) SUMIF関数について 4 2023/06/14 13:13
- 数学 小数点の計算についてです。 答えは与えられた数字の中で最も少ない桁に四捨五入で合わせるのですが、ひと 2 2023/04/04 15:19
- 計算機科学 2進数の計算について 2進数の値は全て8ビットで負数は2の補数形式とする。結果が8ビットで表現出来な 3 2023/07/22 14:08
- Visual Basic(VBA) visual basic初心者です。 visual studioで電卓を作成しています。 実行時にテ 1 2023/02/08 00:18
- 高校 高校化学、気体、温度の有効数字 3 2023/04/02 11:39
- Excel(エクセル) エクセルの数式について教えてください。 2 2023/03/04 09:54
- Excel(エクセル) B列に、A列の数字が偶数の場合は1減算した数字、奇数の場合はそのまま数字を自動表示したい 4 2022/04/16 12:01
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
三菱シーケンサ(Aシリーズ)で...
-
VBAでミリ秒まで出力する方法
-
EXCELの関数"STDEV(標準偏差)"...
-
三角関数、逆三角関数の算出方...
-
逆ポーランド記法
-
巨大な素数の効率的な作り方
-
2進数の足し算(C言語)
-
10次の多項式を求めるプログラ...
-
べき指数の求め方
-
距離から緯度経度を求める方法
-
変換指定子%22-16gの表示...
-
powf を使わずにべき乗を計算
-
VB.net Double と...
-
計算に誤差が出る?
-
ExcelのINT関数の計算結果がお...
-
スーパーコンピュータの処理速...
-
16進数 加算 減算 C言語
-
教えて小数点の比較!(C言語)
-
浮動小数点数を10進表記するア...
-
加算と減算で乗算と除算を表現...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
O(n log n)について2
-
16進数 加算 減算 C言語
-
c languageで 簡単な質問があ...
-
ExcelでPC(パソコン)によって...
-
”/”を使わずに割り算したいんで...
-
有効数字について 以前質問をし...
-
三角比の俯角の計算
-
ExcelのINT関数の計算結果がお...
-
VB.net Double と...
-
floatの有効桁数
-
パソコンで階乗を計算
-
三菱シーケンサ(Aシリーズ)で...
-
除算を使わずに10で割りたい。
-
VB6.0での小数点の扱いについて
-
EXCELの関数"STDEV(標準偏差)"...
-
時刻の比較
-
VBAでの割り算の余りの求め方
-
計算の丸め誤差の解消について
-
BCD・HEX・BINについて
-
C言語プログラミングにて、arct...
おすすめ情報