cielacanthの日記 RSSフィード

2007-06-11

[][]小数点数の量子化 01:23

某掲示板に投稿したもの

X[0.0 〜 2.0]の値を取る小数点数をY[0 .. 31]の整数型に量子化することを考える。普通に考えるとこうなる。

  1. X が 2.0 を含まない場合
    1. Y = trunc(X * 32 / 2.0)
  2. X が 2.0 を含む場合(Z = X * 31 / 2.0 と置く)
    1. Y = trunc(Z)
    2. Y = trunc(Z + 0.5) *1

X が 2.0 を含まない場合は全く問題ない。しかしそうで無い場合は2-2を使っても

  • 0.0 <= Z < 0.5 → Y = 0
  • 0.5 <= Z < 1.5 → Y = 1
  • 30.5 <= Z <= 31.0 → Y = 31 *2

つまりY=0, 31の場合だけ、とれるZの範囲が半分になってしまう。この場合の量子化を正確に行うのは少し難しい。

改良案1)

  • Z = X * (32 - delta) / 2.0 (deltaは適度に小さい数。Xが整数値ならdelta = 1)
  • Y = trunc(Z)

としてYを計算する方法がある。つまり 0.0 <= X <= 2.0 の値を 0.0 <= Z <= 31.99999... に写像してしまえばいい。

改良案2)

X = 2.0 や Y = 32 の値だけを特別扱いする。つまり、

  • Y = trunc(X * 32 / 2.0)
  • if (Y == 32) Y = 31 or Y -= (Y >= 32) or Y -= (Y >> 5)

としてしまう方法もある。

*1: 1だとXがきっかり2.0のときしかYが31にならないので少し改良

*2: Zの最大値は31のため

いいよいいよーーwwwwwいいよいいよーーwwwww 2009/06/14 20:31
シャワー後にイ ラ マ チ オ・ク ン ニで指ホジリしながらクリを攻めていたら
女はカリに舌をレロレロしながら足ピーン!でヒクヒクでした(´・ω・`)
下口がつゆだくだったので、もちろんそのまま生騎乗(`・ω・´)
女がイって思考回路落ちてる隙を狙って中 出 し実行wwwwww
やっぱ中 出 しがイイよねー(・∀・)!!

http://shiofuki.navi-y.net/LzLE6SZ/

しゅおおぁあああ!!!!!しゅおおぁあああ!!!!! 2009/06/22 06:30
あっもう!ちょ!!!凄い!!!凄いよ!!!!!
あぁぁテンション上がりすぎて何から言えばいいかわかんねwww
勃.起おさまんねーし今からもっかい行ってくるwwwwwww

http://ahan.yumenokuni.net/eY90BwF/

いよっしゃーーっ!!!!いよっしゃーーっ!!!! 2009/06/22 07:36
これ始めたら女釣れすぎーw ww
いつもテ〃リ嬢に金払ってたのがバカみてぇ。。
だってヤる度に金くれんだもんヽ(´ー`)ノ
ぶっちゃけ風俗は卒業ッス(´ー`)y─┛~~

http://dopyun.quitblue.com/TRhVHLX/

2007-06-08

[]データと手続き 01:23

パソコンではなく、機械一般を考えてみます。普通はなんらかのデータを与えてなんらかのデータを返す何かを想像するのでは無いでしょうか。例えば、切符の発券機はお金と値段や購入数などを入力すると切符を出してくれます。また、飲み物の自動販売機はお金をいれると、その対価として飲み物を提供してくれますね。私たちが日頃から慣れ親しんでいる「機械」とはそういうものなのです。

しかし、パソコンやマイコンなどのいわゆる「プログラマブル」な機械では、その考え方を一歩進めて「データとそのデータを扱うための手続き」を与えることにしました。レジスタといわれるデータを一時的に保存するための記憶領域と、命令セットと呼ばれるそのデータを加工するためのいくつかの原始的な命令を定義したのです。そうすると、あら不思議、マイコンは発券機にも自動販売機にも電子ジャーにも使われることとなりました。パソコンもGPUも基本的にはそういった進化の過程を踏んでいます。

ではその、より原始的な命令を集めた命令セットはいったい誰がどうやって決めたのでしょうか?  実はこれは大変難しい問題で、PC系でよく使われるIntelCPUでさえ未だに完全には固定されていません。新規命令が追加され続けているのです。ただし、一般的な話をすると、PCは基本的には数学を基盤にしているため、数学的な命令(加算や乗算など)が命令セットに含まれることが多いです。もちろん数学とは関係ない、全く新しい体系を元に命令セットを作ってもなんら問題はありません。

トラックバック - http://d.hatena.ne.jp/cielacanth/20070608

2007-05-23

[]プログラミングの勝手な解釈 01:23

最近よく考えるのですが、プログラミングというのは極論すれば

・人間の意図(かっちょいいゲームが作りたいだとか、知り合いだけが見られる日記サイトを作りたいとか)

から

コンピュータが解釈できるような形(アセンブラなど)

への変換作業だと簡潔に記述できるものだと思います。

一言にプログラマといってもJava使いだったりコボラーだったりといろいろありますが、本質的には「人間の意図→機械語」の長大な変換のなかのどの部分を担当しているのかといった違いしか無いのです。

2006-06-12

[] c++プロパティ 20:41

3ヶ月も放置プレイ。。。

C++だとコンマ演算子は例外的にオーバーライドできず、使い勝手がいまいち。

そのうち気が向いたら公開します。

トラックバック - http://d.hatena.ne.jp/cielacanth/20060612

2006-03-07

[] c++プロパティ 16:24

では早速

2 コンパイラの独自拡張に頼る

を実装してみます。なんで最初に2かというと、こちらの方が簡単だからです(^^;

vc6 では以下のプロパティ構文をサポートしています。

int get_Size() { return m_size; }
void set_Size(int value) { m_size = value; }
__declspec(property(put = set_Size, get = get_Size)) int Size;

また、ManagedC++では

__property int get_Size() { return m_size; }
__property void set_Size(int value) { m_size = value; }

C++/CLIでは、

property Size {
  int get() { return m_size; }
  void set(int value) { m_size = value; }
}

のような記述ができます。

基本的にはBorland系のコンパイラでも似たようなことができるのですが、肝心のgccではできません。移植性を考慮してマクロを使ったとしてもwinコンパイラ限定のノウハウとなります。残念ながら移植性を考慮した場合は使えなさそうです。

トラックバック - http://d.hatena.ne.jp/cielacanth/20060307