ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月28日(木) 21:56

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 8 件の記事 ] 
作成者 メッセージ
 記事の件名: Single型の使用頻度。
投稿記事Posted: 2006年5月03日(水) 22:45 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
Single型は、単精度浮動小数点型(32ビット) という説明の基本型ですが、皆さん実際どれくらいの頻度で使っているのでしょうか?

僕はほとんどをDouble型で済ませちゃうので使う機会が少ないのですが。

Single型をよく使うと言う人は、どのような用途で使うのかを書いていただければ幸いですかね。雑談として。

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年5月03日(水) 22:50 
オフライン
Site Admin

登録日時: 2005年5月30日(月) 15:08
記事: 535
型の話題で盛り上がってますな!

String型に関しては、クラスモジュール化をして、仕様をオープンにできるようにする予定なので、こちらに関しては少々お待ちください。

Single型ですが、私の場合はほとんど使わないですね。使うとしたら、DirectXなどの外部モジュールのデータで指定があるときくらいでしょうか。

実際問題、処理速度に関してはFPUに投げているので、SingleもDoubleもあまり変わりません。内部的に倍精度で計算しなければならないところなどもありますので、もしかしたら、Double型のほうがちょっと早いって可能性もあるのかも(ここらへん、どなたかベンチマーク頼みますm(__)m)!?


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年5月04日(木) 06:52 
オフライン

登録日時: 2005年5月31日(火) 07:49
記事: 162
僕はほとんどの処理を Single 型で済ませています。何故かというと、昔からの慣習で、というか癖です。
現在のメモリは dual channel 技術で多ワード転送が可能ですが、ちょっと昔は 64-bit の転送のコストは結構高かったこともありました。
精度を多少無駄にしても転送速度を上げたいこともあったのです(浮動小数点計算のまわりでは特に)。
キャッシュが乏しかった頃は転送にかかるコストも馬鹿になりませんでしたからね。
今ではそういうことも無いとわかっていつつも、つい、ね。悪しき慣習ってやつですな。

でも必ずしも悪というわけでは無いんです。(一応自己弁護)
Intel は 「必要でないならば倍精度型 (Double) ではなく単精度型 (Single) を積極的に利用すべし」という旨のことをどこかで言っていた記憶があります。(どこだったかな…)
他ならぬ Intel が提示する指針ですので、これに従う価値はあるとおもいます。(説得力

>> 山本さん
> 内部的に倍精度で計算しなければならないところなどもありますので、もしかしたら、Double型のほうがちょっと早いって可能性もあるのかも
まじっすか!?それは初耳です。僕はてっきり、内部では全部拡張倍精度 (80-bit) で処理されているものだと思い込んでいました。
この辺、ちょっくら調査しておいた方がよさそうかも。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年5月04日(木) 08:10 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
私がCを学んだときには既にdouble型で十分と言われてきたので,私はABでもDoubleばかり使っています。
他力本願ですが,SingleかDoubleかで迷うよりもコンパイラの最適化が進むことによる高速化の方を期待すればいいやと言う考えです。

想像で話をしても仕方が無いので検索して
http://www.google.co.jp/search?q=C+double+float
最初の方に見つかったこのページに計測するコードがあったのでABに持ってきてみました。


最後に編集したユーザー イグトランス [ 2006年5月08日(月) 07:27 ], 累計 1 回

通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年5月04日(木) 11:11 
オフライン

登録日時: 2005年5月31日(火) 07:49
記事: 162
イグトランスさん、コピペ後の修正箇所が間違っていますよ。

DoubleLoop() ではカウンタが Double 型になって、演算オペランド r は Single 型のままです。そりゃあ Single が勝ちますよ。
というか Sin() の勝負では Double 型が勝っちゃってますから、本来は Double 型の方が圧倒的に速い証拠ですね。

もう一つ。Sin() は引数が暗黙的に Double 型なので、公正を期する意味で次のように変えた方が良いと思います。
コード:
r += Sin(r)
もしくは
コード:
r += Sin(0.1 As Single)    ' 適切な型にキャスト
# ごめんなさい、いま Linux から投稿しているのでこのサンプルをすぐには試せません。


それから、先程の「どこだったかな…」探していたら見つけました。
ftp://download.intel.co.jp/jp/developer ... inal_i.pdf
↑ これの浮動小数点に関するページ (2-54) です。
コンパイラの最適化を大前提としている点が、ちとイタイ。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年5月04日(木) 22:18 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
ギャー!すみません。
大ポカをやらかしてしまいましたね。
どおりでSingleが勝つわけです。

私も自宅にいるわけではなく今は試すことができません。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年5月06日(土) 17:40 
オフライン

登録日時: 2005年8月23日(火) 00:15
記事: 161
お住まい: 沖縄県
自分もtakさんと同様に、精度を気にする必要の無い場合は、Single型で処理を行っています。
昔からの習性で、メモリー使用量が気になるからです。

他の人にプログラムを公開する必要が無い場合は、整数(固定小数点)で処理します。

例えば、
  小数点2位までの精度で十分な場合は、0.01 を 1として計算
  この時 1 は 100 と表現します。

  昔のCPUは、この方法で数百倍高速化出来たけど・・・
  今は引き継ぎしやすい表現を心がけています。

Double型の性能について
十分にチューニングを行った(SSEや並列処理を行う)ソフトウェアでは、
Single型が早いと思います。

現状のActiveBasicに限れば、データを設定する時の変換処理で
Single型の方が若干不利になっている為、Doubleを使用した方が
性能が出ていると思われます。


takさんが質問していた件について

全部拡張倍精度 (80-bit) で処理
32ビット版では、FPUで処理を行うので、各々の計算自体は80bit精度
しかし、計算結果はSingle(32bit)またはDouble(64bit)に丸めて保存。
(64bit版は不明)

「必要でないならば倍精度型 (Double) ではなく単精度型 (Single) を積極的に利用すべし」
たぶんSSEの事だと思います。
Doubleは1命令で2演算、Singleだと1命令で4演算可能になります。
精度を必要としない場合は、Singleで計算すると最大2倍早くなる可能性があるので、推奨していると思われます。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年5月08日(月) 07:38 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
コードを直して計りなおしました。
r = 1087937
r = 999999.999838975
Single: 332
Double: 475
Long : 119
r += 0.1を10,000,000回行った結果です。
おまけにLong版を付けてみました。 r = 3.1417601108551
r = 3.14176007475135
Single: 408
Double: 348
こちらは次の2行を2,000,000回行った結果です。
r += 0.1
r += Sin(r)


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 8 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[10人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean