2011年11月30日

言葉さがし

最近、寒くなりましたね。
自分は暑いよりも寒い方が好きなのですが、好きだろうとやっぱり寒いものは寒いです。
いよいよ2回目のブログとなりました。ササモンです。

数年前の話なのですが、こんな会話がありました。
「この企画にゲーム性が足りないっていうけどゲーム性ってなんだ?」
言われてみると、ゲーム性という言葉の定義がはっきりとしません。
調べてみてもこんな感じじゃないの?みたいなものしか出て来ませんでした。
その時に自分が考えていたのは、
「プレイヤーが取った行動や思考に対して、なんらかの結果(成功失敗、勝ち負け、損得)が出るもの」
というものでなんとなくこんな感じというのは判るのですが
うまく説明するのがちょっと難しいと思っていましたふらふら
例えば、
敵を攻撃してうまく成功すると倒してアイテムを手に入れるとか
落下してくるブロックをうまく並べるとラインが消えるとか
そんなものだろうと考えていたわけです。
その時の企画もゲーム性が足りないということは、プレイヤーがどのような行動を取っても
結果が1つしか出ないとか結果に意味がないとか
そもそもプレイヤーが取れる行動がほとんどないとか
そんな企画だったのでしょうか。

かなりモヤモヤしてたのですが最近になって、自分の考えにピッタリ当てはまる言葉を見つけました目
それは、「ゲーム理論」です。
こちらはいわゆるゲーム会社が作ってるようなゲームの話ではなく、
カテゴリ的には経済や経営の部類になります。
「ゲーム理論」は特定の条件下で複数人のやり取りの戦略を研究することが目的です。
たいていの場合が経済や経営で利用されるとはいえ、いろんな分野に応用することができます手(グー)
例えば、身近なところではじゃんけん手(チョキ)に利用出来ますし、もっと大きな分野だと国の外交戦略飛行機にすら
応用することが可能です。
この理論を対人に限定せずに考えれば自分の考えがピッタリ当てはまります。

このように、自分がモヤモヤと考えたことはすでに誰かが考えていて
きちんと整理されていてそれに名前がついていることが少なからずあると思います。
みなさんも何か言い表したいんだけどなんて言えばいいのか判らないモヤモヤした言葉はないでしょうか?
探してみるときっとピッタリの言葉が見つかると思います目

ゲーム性の定義についてまた考え直しになるのは内緒です。




posted by 管理人 at 14:21 | 日記

2011年11月29日

開発環境作り

今日はスライム肉まんがファミリーマートで販売開始になったということで、
会社の近くのファミリーマートに行ってみたのですが行ってみた店舗では全て売り切れていました・・・もうやだ〜(悲しい顔)
まるでメタルスライムを探している気分でした。経験値を貯めることに失敗したケイタですふらふら

さて、少し前の話になりますが「ゲーム開発環境勉強会」に参加してきましたイベント
内容はGDC2011の「Automated Testing Roundtable」の議事録の和訳されたスライドの紹介をし、
その後参加者同士でラウンドテーブルを行うというものでした。
上記のスライドは以下のリンク先で公開されています。興味のある方は是非ご覧になって下さいわーい(嬉しい顔)
http://www.slideshare.net/TakashiKokawa/gamedevenvstudy1-public

今回の勉強会で言うところの開発環境とは、ゲームのテスト、構成管理、品質管理ツールについてです。
ゲームのテストと言われてあまりイメージが浮かばない方が居るかもしれませんが、
例えばゲームマップの中をキャラクターが歩いていて、突然マップから落ちてしまってゲームが進行不能がく〜(落胆した顔)になってしまわないかどうかなど、
そのようなチェックもゲームのテストとなります。

そしてボリュームが膨大になっている昨今のゲームにおいて、そのようなチェックを人の手でくまなく行うのはかなり無理が生じているため、
ゲームのテストを自動で行うことは出来ないだろうかという発想に至りますひらめき

とは言え、ゲーム作りはこの方法が間違いなく正しいというものはないため、集まった参加者の中で「自分のところではこんなことをしている」
という意見を多く聞くことができ、様々な観点から開発環境を考えられる、とても良い勉強会でしたグッド(上向き矢印)

今後もより良いゲーム作りを行っていくため、日々の勉強を怠らないようにしたいと思いますパンチ

posted by 管理人 at 23:55 | 日記

2011年11月28日

大作ラッシュです!

先日のblogにてさいやんがパソコンを買い換えた話を書いておりましたが、
私も先日5年ぶりにパソコンを買い換えました。
目的は・・・やはりゲームゲームです!
Battle Field 3,
CALL of DUTY MW3,
The Elder Scrolls V: Skyrim,
Diablo3,
PlanetSide2
etc...
※レーティングにより年齢認証が必要なページもありますのでご注意下さい
秋から来年にかけてPCゲームラッシュダッシュ(走り出すさま)と言うことで、
快適なゲームライフを目指してあーでもないこーでもないと友人に相談し、
何だかんだと追加して予算をオーバーしつつ自作のマシンを組み上げました。
1台前のPCはBTOだったので自作は7年ぶり位になります。
久しぶりだったのでわからない事も多く大変でしたが、
やはり自分で必要な物を選びセットアップしただけあって愛着ムードも湧きますね。


2台前迄はほぼ毎年PCを自作していたような状態だったのですが、
それがピタりと止まりその後PCの買い替え自体も1回しかしていなかったのは
やはり据え置きゲーム機の性能が大きく上がったグッド(上向き矢印)事が大きかったです。
以前は海外のPC向けタイトルはPCでしか出来なかったのですが、
Xbox360, PlayStation3が発売されてからはPCで出た大型タイトルもすぐに移植されるようになり、
次第にマルチプラットフォームでPCと家庭用同発という事も多くなってきました。
さらには国内各社様の手により日本語ローカライズされる事も多くなり(とてもありがたいです!)
PCでゲームをする、という事が少なくなっていました。


昨今、モバイル分野では「ゲームしか出来ないハードウェアは淘汰される」なんていう話も出ていましたが、
機能を絞った分圧倒的に安価で(比較的)省スペース、
専用のインターフェースを持ち、且つユーザー間のスペック差が無いという要素は、
特に据え置きゲーム機の中ではまだまだ重要なのかなと思います。
先に挙げたタイトルの中でも、売上の8割が家庭用ゲーム機であったり、
そもそも開発のリードプラットフォームが家庭用ゲーム機というタイトルもあります。

ですが、PCでは年々上昇を続けるハードウェアのスペックに応じて
最新の環境・技術で圧倒的な体験が得られます。
BattleField3を画質最高設定でプレイした時の映像は只々凄いがく〜(落胆した顔)の一言でした!
(余談ですが、自分のマシンでは最高画質のままで快適なプレイは出来ませんでしたふらふら
公式のトレーラー等でもその凄さは確認できるかと思います。


年末が近づきボーナス有料が出る方は、
ワンランク上の体験を求めてのPC購入も良いかもしれません。
ちょっと(でも無いかもしれませんが)お金が掛かるのが難点ですが・・・
十分元は取れる、と言える位のタイトルが揃ってると思います わーい(嬉しい顔)
年明けまでゲーム予定表がギッシリつまってる、ゆうでした。

posted by 管理人 at 15:21 | ゲーム

2011年11月25日

参考にするなら

こんにちは、ダイトクです手(パー)
最近寒さも増して来たため、コタツを稼働させ始めましたわーい(嬉しい顔)
そして、コタツ布団を体に巻きつけて寝る猫の姿に毎日癒されてます猫


さて本題ですが、学生の方はいつもプログラムを書く際に何を参考にしているでしょうか。
Web、参考書、先生や先輩のコード など様々な物があるかと思います本
では、プロの書いたソースコードを直接見て学んだ事はあったでしょうか。

私が学生の頃に参考にしていたのはやはり書籍や先輩のコードなどが主で、
プロが作ったゲームのコードを見る機会はありませんでしたふらふら

しかし、最近このようなニュースがありましたNEW

「DOOM 3」のソースコードが無料公開に。id Softwareの技術に触れられるチャンス
http://www.4gamer.net/games/002/G000243/20111124008/
4gamer.net 様より引用

有名なFPSであるDOOM3のソースコードが無料公開されたという物ですexclamation
これだけ規模の大きなゲームのソースコードを見る事が出来るというのはとてもありがたい事ですねexclamation
仮に全部を理解できなくとも、自分の興味のある分野についてどんなコードで実現しているのか、
自分のコードとどう違うのかというのを見てみるのもとてもためになると思いますパンチ

私自身もまだ勉強する事も多いので、これを見て色々な技術を学んで行きますexclamation×2


posted by 管理人 at 15:14 | 日記

2011年11月24日

有言実行

こんにちは晴れ
例に漏れず、年末のゲームラッシュゲームぴかぴか(新しい)で時間が足りない予感の「オクダ」です。

「最近、ウォーキングを始めました!」くつ
そして、既に1ヶ月ほど続けてますexclamation×2

少し前から健康の為にウォーキングをするように家族に薦められていました。
そんな折、ランド・ホーの塚本社長のパワフルな毎日を知って尊敬と共に羨ましく思ってました。
塚本社長は大量に飲み食いした翌日の朝も、平然とジョギングをしたり水泳に励んだりされているのですあせあせ(飛び散る汗)
ものすごいバイタリティですね。
自分もそうなりたいと思っていました。
そんなある日、塚本社長と飲む機会があり、その席で宣言してしまったのです。
「ウォーキング始めます!」
酒の勢いとはいえ、ある種の好機と考えての事でした。
自ら背水の陣をひき、有言実行せざるを得ない状況を作り出したのです。

以来、ほぼ毎朝ウォーキングしています。
早起きして体を動かす事で一日を爽やかにスタートする事ができています。
ウォーキングの記録には「Nike+ GPS」を使っています。
他にもランニングを記録するスマホアプリがあるので、お好みで選ぶと良いでしょう。
アプリからfacebookやtwitterに報告する事で
「私、ちゃんとやってます」
という事がアピール出来ます。
そして、塚本社長をはじめ多くの方から励ましをいただいたりしています。

こうなるとやめられないですよねふらふら

皆さんも何か始める時はまわりの人に宣言して経過を常に報告し続ける仕組みを構築してみましょう。
継続はチカラです!!


posted by 管理人 at 18:02 | 日記

2011年11月22日

押せ押せKinect

こんにちは、マイキーです晴れ

昨日、MicrosoftはKinect Acceleratorの参加者の募集を開始しました。
Kinect Acceleratorとは、KinectとXBOX360もしくはWindowsPCを用いて、ナチュラルインタフェースアプリケーションを企画するチームや企業を募集し、優秀ぴかぴか(新しい)な応募者はMicrosoftから三か月の間、ソフトウェア開発を行う為の様々なサポートを受けることができるという、コンペのような企業支援プログラムビルです。
期間中、サポート対象となった応募者が受けられるサポートの内容は
 ・開発費2万ドルふくろ
 ・各種開発機材やソフトウェアCD
 ・開発スペース家
 ・諸々の分野の専門家や技術者との面談や指導パンチ
 ・成功を収めた企業の経営者との会食レストラン
などなど、かなり豪勢なものになっています。

このプログラムのミソは、単なるコンテストではなく「企業支援の場」であるという事。
三か月の間に作られた製品に関する権利等は、開発を行ったチームや企業に帰属します。
ですので、これを機に会社を起業するという選択も、非常に現実的な選択と言えます。
Kinectハッカーの皆様にとっては、一山当てるチャンスかもしれません。
また、「アイデアはあるんだけど・・・」という方にとっても、かなり良いきっかけになるのではないでしょうか。

Kinectは、ケーブルと電池から解放された非常に優れた入力デバイスだと、私は考えています。
自室のケーブル地獄を改善できるような、そんなアプリケーションが開発されないかなぁと、ちょっと期待です。
機会があれば自分も手を出してみたい所です。

それではまたひらめき


posted by 管理人 at 23:16 | 日記

2011年11月21日

光陰矢の如し。でも、

少し前に、レビューを投稿すると商品券が当たるという応募が当たりましたるんるん
と、喜んでいたら、昨日は愛用のゲーム機が故障exclamation&question
かなり長い間使っていたので、これを機に買い替える事に。
なかなかにアップダウンが激しい日々です右斜め上 右斜め下
こんにちは、ハラです。

前回のブログで、ダークソウルをプレイしていますゲーム
と、書いたのですが、実は今もプレイしていたりします。
それどころか、

車(セダン)バトルフィールド3
爆弾コールオブデューティ モダン・ウォーフェア3
パンチアンチャーテッド 砂漠に眠るアトランティス
飛行機サイドスクローラー

などに加え、いくつかのブラウザゲームも並行してプレイしていたりしますわーい(嬉しい顔)
それ以外にも、発売中、年末年始に向けて発売予定でプレイしたいゲームが、まだまだまだありますグッド(上向き矢印)グッド(上向き矢印)
なかなか終わらないのには、そんな事情が見え隠れ・・・・


突然話は変わりますが、学生の方々は「学生のうちにやれる事をやっておく」
といった旨の話を聞いたことは無いでしょうか?
特に、今年卒業を迎える方々は、人生の先輩から聞く機会があるかもしれませんひらめき

↑の私の例は、ゲームかなり特殊ゲーム だとは思いますが、
社会人になると、環境の大きな変化も伴い、色々とやらなければならない事が増えていきます。
後々にやれなくなるから、今のうちにやっておくと良いよってことですねぴかぴか(新しい)


とはいえ、後々になってやっておきたかった事が見つかる事は、ままあります。
1日は24時間、その中でなんとか時間をやりくりするしかありません。

どうしても時間が足りないexclamation1日に128時間くらい欲しいexclamation×2
そんな時は、既に社会に出ている先輩にアドバイスをお願いしてみてはどうでしょう?
(自分なりに色々工夫するのは大事なので、そちらも行ってくださいね)

自分が体験している状況、これから体験するであろう状況を、先輩方は既に体験しているかもしれません。
そして、その状況に先輩方は日々挑んでいるはずです。
ならば、色々とありがたいお話が聞けるかも?

もしも、身近に質問できる方がいるようでしたら、お話を伺うとすごく勉強になるかもしれませんよひらめき
時間のやりくりは、やりたい事が多ければ多いほど大事になってくる事ですから。

あ、先輩方は色々と多忙ですふらふら
伺う時は、先輩の都合を考慮するのは忘れないで下さいねわーい(嬉しい顔)


では、私は色々な事をする時間を生み出すためのお仕事を頑張りますあせあせ(飛び散る汗)あせあせ(飛び散る汗)

posted by 管理人 at 16:24 | 日記

2011年11月18日

時代の進歩

こんにちは。さいやん、こと齊藤です。

最近、自宅のパソコンを買い替えました。
設置場所の都合もありノートパソコンを使用しています。
ちなみに、前のパソコンを買ったのが4年ほど前。
当時のフラグシップモデル位置情報の一角であった、
デュアルコアの Core2Duo、メモリ2GB、GeForce 8600M GT 搭載
のパソコンから、
論理8コアの Core i7、メモリ16GB、GeForce GTX 560M 搭載
のパソコンにアップグレード右斜め上しました。

何故買い換えたかというと、目的はゲームゲーム
最近はよくブラウザ型のゲームを遊ぶのですが、
だんだんとやりこむうちに表示物も増えてきてスペックが厳しくなり、
ストレスなく遊べるようにと買い替えを決意しましたパンチ

パソコンを買い替える動機として、ゲーム目的というケースは
それなりに多いのではないでしょうか。
ゲームが消費を牽引しているいい例ですねexclamation


買い替えによりスペックが大幅に上がったにもかかわらず、
購入時のお値段有料は4年前に比べ、ぐっと安くなっていました右斜め下
技術の進歩ってスゴイですねexclamation


パソコンの買い替えで面倒なのが、環境の入れ替えだと思いますふらふら
データやメーラー、ブラウザのお気に入りの移行、
アプリケーションの再インストール、etc...
私も過去、幾度となくパソコンを替えてきたので、なんとか効率化を
図れるようにいくつか工夫をしていますひらめき

1 基本は、本体とは別に外付けのHDDを利用すること。
本体を買い替えても外付けHDDを差し替えるだけで、
データなどはそのまま使えます。
2 さらに、ポータブルアプリケーションの利用。
USB等のポータブルストレージに入れて、そこから起動することで
マシンを選ばずどこでも同じ環境で利用できるようにしようという
思想で作られているアプリケーションで、
FirefoxやChromeなどのブラウザ等が対応しています。
参考はこちらのサイトをご覧ください。
http://portableapps.com/
それ以外にもフリーソフトなどではインストール作業を要さず
実行ファイルを起動すれば使えるタイプのものも多くあります。
そういったものを選んで使用し、外付けHDDに入れて利用することで、
環境移行時にもそのまま使えるようになります。
3 さらに、クラウドの利用。
Gmailなどを利用することで、パソコンの買い替えはもちろん、
スマートフォンなども含めて自分のパソコン以外からも簡単に
アクセスすることができます。

これらを活用することで、買い替えたパソコンを設置してから
最低限の環境を復旧するまで1時間程度で済みましたわーい(嬉しい顔)
ユーザビリティの向上は素晴らしいですねexclamation

セキュリティソフトやプリンタのドライバ等、本体に直接インストール
することで役割を果たすものもあるので、インストール作業がゼロ
という訳にはいきませんが、極力再インストール不要な環境作りを意識することで、
パソコンの買い替えの際の移行がとてもスムーズになりますぴかぴか(新しい)

ゲームですら、ブラウザ型のゲームであれば再インストールの必要なく、
ネットにつながればすぐに遊べたのには、時代の流れを感じました。
インフラの進歩はスゴイですねexclamation

というわけでパソコンを買い替えることで、
改めて時代の移り変わりと進歩を再認識しましたわーい(嬉しい顔)

移りゆくニーズをとらえ、いつの時代にもフィットムードするエンターテインメントを
提供できるよう、日々勉強を怠らず努力したいと思いますパンチ

posted by 管理人 at 18:53 | 日記

2011年11月17日

Phongの次は…

最近、めっきり寒くなってきましたねふらふら
皆さん、カゼは大丈夫ですか?
私も寒さやカゼに負けないように、プロ野球の日本シリーズで熱く盛り上がっていますグッド(上向き矢印)
お久しぶりです。マックスです。


さて、私は、以前のブログでPhongの反射モデルについて、簡単に論文を紹介しました。
今回はそのPhongの反射モデルの繋がりで、Blinnの反射モデルについても
論文を探して読んでみたので、簡単に紹介したいと思いますひらめき

まず、読んだ論文は1977年のSIGGRAPHでJames F. Blinnにより発表された
「Models of Light Reflection for Computer Synthesized Pictures」です。
この論文内では、2種類のBlinnにより提案された反射モデルが書かれており、
それぞれPhong、Torrance-Sparrowの反射モデルを元に考えられた反射モデルです。
(おそらく区別するためだと思いますが、Phongの反射モデルを元にした方は
Blinn-Phongの反射モデルとも呼ばれています耳

このBlinnの反射モデルでは、ハーフベクトルHを用いるという特徴があります目
(ハーフベクトルHは光源方向Lと視線方向Eとの間の角度を2等分するベクトルを意味します。)
鏡面反射の光の強さは光源方向Lの正反射方向で大きくなる性質を生かして、
Blinnの反射モデルではハーフベクトルHと法線Nとの間の角度を用いて、
鏡面反射の強さを求めています。
すなわち、この角度が小さいほど鏡面反射が強くなり、
角度が大きいほど鏡面反射が弱くなります。


Blinn-Phongの反射モデルでは、個人的に面白いと思っていることがあります。
それは、物理学に基づいたモデルではないということです。
実験で計測されたデータをもとに、反射モデルを提案しています。
見た目を重視するCG特有の表現といえるかもしれませんぴかぴか(新しい)

また、論文を読んでいて少し驚いたことが一つありました。
それは2.3行と簡単ではありますが、二色性反射モデルについても触れていることです。
(二色性反射モデル:簡単に説明すると、
  光の反射成分は物体色の拡散反射と光源色の鏡面反射の2つで構成されるという考えです。)
二色性反射モデルは、1985年に発表されたshaferの論文が参考文献としてよく見かけられます目
ですが、それよりも以前の1977年に発表されたBlinnの論文の中で、
触れられていたのはなかなか興味深かったですぴかぴか(新しい)


Blinnの反射モデルはCGの参考書でよく見かけるものなので、
一緒に読んでみると理解が深まりやすいかもしれません手(グー)
私も様々な論文に触れて自分の知識にプラスしていき、成長していきたいと思いマックスexclamationパンチ
それではまた手(パー)

posted by 管理人 at 21:41 | 日記

2011年11月16日

浮動小数点のカラクリ2

こんにちはexclamationコンドウです。秋も深まり若干肌寒く感じる季節になってきました。
手洗い手(パー)うがいわーい(嬉しい顔)励行しているにも関わらず、風邪ダッシュ(走り出すさま)ぎみで我ながら抵抗力の無さを嘆いておりますたらーっ(汗)


さて、前回に「次回はプログラムネタします」と言いましたがいいネタが思いつかず
またもや浮動小数点ネタで申し訳ありませんがいってみたいと思います。

前回の 浮動小数点のカラクリ です。
まだ読まれていない方は先にこちらを読むと理解が深まります。


今回は前回にやろうとしていた計算(まずは足し算)についてやろうかと思います。

その前に前回のおさらいとしてまずは10進数から浮動小数点に変換する仕組みをさらっと説明します。
10進数で115を、正規化で表してみたいと思います。

やり方は簡単です。まず115を2進数に変換します。

115(10進数) = 1110011(2進数)

次に仮数部を求めます。仮数部は前回も書きました1〜1.999999…の範囲となりますのでまず
この範囲になるよう小数点の位置を決定させます。1〜1.999999…の範囲に収めるには最上位bitの
右隣に小数点を持ってくればできます。

1110011 → 1.110011

小数点は6つ左に移動したので指数部は26(=64)に決まります。
仮数部 1.110011 は 1のところだけを抽出して10進数化して、1 + 1/2 + 1/4 + 1/32 + 1/64 で 1.796875 です。

指数部と仮数部掛け合せると 26 x 1.796875 = 115

となります。簡単ですね。もし小数点のある実数 68.3542 の場合なら1〜1.9999…の範囲になるまで
2で割り続けます。

68.3542 / 2 = 34.1771
34.1771 / 2 = 17.08855
17.08855 / 2 = 8.544275
8.544275 / 2 = 4.2721375
4.2721375 / 2 = 2.13606875
2.13606875 / 2 = 1.068034375

6回続けたので指数部は26、仮数部は1.068034375となりました。
指数部と仮数部掛け合せると 26 x 1.068034375 = 68.3542
具体的な浮動小数点にするには

 符号部 +なので 0
 指数部 127(バイアス値 *1) + 6 = 133
 仮数部 1+0.068034375 の 0.068034375 を固定小数点化 → 0.068034375 x 223 = 570713.7024 → 小数部四捨五入 → 570714

16進数で表現すると、0x4288B55A
もし、0以上1未満の値なら逆に1〜1.9999…の範囲になるまで2倍ずつ行っていき計算した回数分だけ
指数部のバイアス値127から引けばいい訳です。

これで手動にて浮動小数点化できるようになりました。



次はいよいよ加算計算です。まず計算を行う為には以下のルールで進めていきます。


・計算する値の指数部を合せる(結果は仮数部に反映させる)
・指数部を合わせたら仮数部同士を足す
・もし仮数部のbit数をオーバー(オーバーフロー)したら指数部にそれを反映させる

です。実際に行ってみます。

値は何でもいいのですが、246.912(以下A) + 1975.28(以下B) にします。

Aを浮動小数点化すると、0x4376E979
Bを浮動小数点化すると、0x44F6E8F6
更に2進数化してみます。(分かりやすくする為 符号部、指数部、仮数部で "_" 挟みます)

A = 0x4376E979 = 0_10000110_11101101110100101111001
B = 0x44F6E8F6 = 0_10001001_11101101110100011110110

ここで仮数部で省略されている+1.0を設定する為、仮数部のMSBに1を追加し24bitにします。

A = 0_10000110_111101101110100101111001
B = 0_10001001_111101101110100011110110

先のルールに従い指数部を揃えます。揃える場合はどちらか大きい方に揃えます。
Aの指数部は 10000110(2進数) = 134(10進数)
Bの指数部は 10001001(2進数) = 137(10進数)
137 - 134 = 3の差があるのでAの指数部に3を加えて揃えます。3を加えた事で仮数部もそれに合せて調整する必要があります。指数部が23=8倍になったので仮数部は1/8します。1/8は3bit右シフトになりますので

A = 0_10001001_000111101101110100101111

となります。この時溢れた3bitの内の最上位bitが1なら+1して丸め処理しておきます。
これで指数部が合いました。

A = 0_10001001_000111101101110100101111
B = 0_10001001_111101101110100011110110

次に仮数部同士の足し算です。

A = 000111101101110100101111(2進数) = 2022703(10進数)
B = 111101101110100011110110(2進数) = 16181494(10進数)

2022703 + 16181494 = 18204197 = 1000101011100011000100101

仮数部が24bitをオーバーしていなければそのまま仮数部の下位から詰めていきます。オーバーしている場合は1bit右シフトしてから下位から詰めます。

10.00101011100011000100101 ← この場合は24bitオーバーしているので右に1bitシフトした
00010101110001100010010 を仮数部に詰めます。

また仮数部の24bit目以降が0で無ければその分指数部に加味(+1)します。

0_10001010_00010101110001100010010

これで完成しました。


01000101000010101110001100010010 ≒ 211 x (1+0.085054636) = 2222.191894528

10進数レベルで246.912+1975.28=2222.192ですが10進数→2進数→10進数変換した際の情報落ちが出ている為、若干精度悪いですねたらーっ(汗)

足し算のルール見ると分かりますが、指数部に大きな開きのある値同士で計算すると小さい値の仮数部情報がどんどん無くなってしまう事が想像できますね。即ち、「大きい値」に「小さい値」を足しても正しい精度が
得られないという事です。

例えば、1.5 x 213 と 1.5 x 2-12 の足し算では指数部に25の開きがあるので23+1bitの仮数部は0になってしまいます。

ここが浮動小数点の弱点でもあるところです。

以上の作業をプログラム化したものがこれです。


union FLOATING_VALUE{
float FloatValue;
struct {
unsigned int Fraction:23;
unsigned int Exp:8;
unsigned int Sign:1;
}s;
};

float FAdd(float a, float b)
{
FLOATING_VALUE va,vb,vc;
unsigned int kasuuA,kasuuB,kasuuC;
int shift,maxExp;

va.FloatValue = a;
vb.FloatValue = b;
vc.s.Sign = 0;
kasuuA = va.s.Fraction | (1<<23);
kasuuB = vb.s.Fraction | (1<<23);
if(va.s.Exp > vb.s.Exp){
maxExp = va.s.Exp;
shift = va.s.Exp - vb.s.Exp;
kasuuC = kasuuB >> shift; // 指数部の合せ
if(shift){
kasuuC += (kasuuB >> (shift-1)) & 1; // 情報落ちするbitの四捨五入
}
kasuuB = kasuuC;
}else{
maxExp = vb.s.Exp;
shift = vb.s.Exp - va.s.Exp;
kasuuC = kasuuA >> shift; // 指数部の合せ
if(shift){
kasuuC += (kasuuA >> (shift-1)) & 1; // 情報落ちするbitの四捨五入
}
kasuuA = kasuuC;
}
kasuuA += kasuuB; // 仮数部の加算
vc.s.Fraction = kasuuA;
if(kasuuA >= (1<<24)){ // 桁あふれ
vc.s.Fraction = (kasuuA >> 1);
}
kasuuA>>=24; // オーバーフローした分
vc.s.Exp = maxExp + kasuuA;
return vc.FloatValue;
}
注意) 処理を分かりやすくする為、負の数や0に対する計算及びNaNや∞などは一切考慮しておりません。
これをWindowsマシン上で実行すると分かりますがコプロセッサで計算された答えと比較した時仮数部で
最大1bitの誤差があるようです。

***


どうですか?謎だった浮動小数点が少し理解できた気がしませんかexclamation&question
この手の内容はなかなか知り得にくいところだと思われます。
因みに引き算も同じような要領で計算する事で行えます。(アンダーフロー発生時に指数から引けばいけます)
次回もネタに困りそうなら乗算でもやろうかなと思います。乗算は加算よりも簡単です。
ではまたexclamation×2

*1 バイアス(bias) 下駄履きとも言ったりします。(例 下駄を履かせる)


posted by 管理人 at 14:57 | 研究・開発