東大宮操車場、こんな場所だったわけだし><
昭和の残像 鉄道懐古写真(4) 東北新幹線全線開業の35年前、特急列車の貴重な休息シーン | マイナビニュース https://news.mynavi.jp/article/retrospective-4/
Find the highest order bit in C - Stack Overflow https://stackoverflow.com/questions/53161/find-the-highest-order-bit-in-c
FreeBSDのソース見たけど、普通にシフトして探してるっぽい><
https://github.com/freebsd/freebsd/blob/master/sys/libkern/fls.c
@orange_in_space 4ビットだけ立てたAND積を取るとか? 若干早くなりそう
IEEE754の「けち表現」><(2/2)
(つづき)
でも、なんで必ず一番左のビット(この場合は24bit目)が1になるの?><の説明><
浮動小数点数ってつまり指数表記なんだから、仮数部を指数部分ずらした表現じゃん?><
例えば「00001010.00」って数があったとする><(2進でも10進でもおk!><)
これで桁以外の意味がある部分(つまり両側から0を削ってたら)は「101」かも><
でもそれだと困る><
101じゃ無くて1010なんだから><
そこで「最初のゼロじゃない数字が何桁目(千の位とか)にあるか?><」ってことも覚えておけば、元に戻せる><
「1010.00」ならば下から見て4桁目だよっておぼえてれば元に戻せる><
つまり、「101」(仮数部)を「4」桁目から(指数部)書いたやつ!><って表現するのが浮動小数点数><
ところで、仮数部は「最初のゼロじゃない数字」からなんだからつまり、仮数部の頭は0では無い><
さらに2進数の場合は0じゃない数字は1しかない><
つまり最初は必ず1になるんです!!!!><
(完)
これを逆から考えれば、整数をfloatに出来るはず?><
https://mstdn.nere9.help/@orange_in_space/100795514968355061
IEEE754ちょっとわかるになった><
IEEE754 単精度で5.0><
バイナリ表現><
01000000 10100000 00000000 00000000
符号:0(正)
指数部 8bit
10000001(127足してある表現なので-127して「2」)
仮数部 23bit
_0100000 00000000 00000000
仮数部は24bit目が常に1だけどケチって23bitに削ってあるので、それを元に戻す><
10100000 00000000 00000000
(とりあえず整数(=指数部が正)だけで考えると)
それを右に24bitシフトして、左に1ビットシフトして、最後に左に指数分(今回は「2」)シフトすると、
(つまり21右シフトする)
00000000 00000000 00000101
0b101なのでつまり10進で「5」 だ!!!><
AN575 IEEE 754 Compliant Floating Point Routines | Application Notes | Microchip Technology Inc. http://www.microchip.com/wwwAppNotes/AppNotes.aspx?appnote=en010961