投稿

5月, 2025の投稿を表示しています

5月30日(金)1コマ目

イメージ
今日、やったこと [確認テスト]ビットシフト 誤差(オーバーフロー、アンダーフロー、丸め誤差) 今日のホワイトボード 誤差 コンピュータで数値処理をする際、意外と結構誤差が生じる。 誤差が発生する理由によってXXX誤差と命名されており、基本情報にもよく出題される。 xxx誤差と理由の関係が意外とわかりずらい。 まず、大前提として、 コンピュータで数値を扱う際、保存するためのエリアはサイズが決まっている。 例えば、char型変数なら1バイトのように。 データエリアのサイズが決まっていることから誤差が発生する 。   オーバーフロー これはイメージしやすい。 データサイズの上限を超えたときに発生する誤差。上位ビットからデータが溢れているので、オーバーフロー。 図 オーバーフロー アンダーフロー 浮動小数点型データで発生する。整数型では発生しない。 データサイズの下限より小さくなるときに発生する誤差。下位ビットからデータが溢れるので、アンダーフロー。 図 アンダーフロー 丸め誤差 まず、 「丸め」はデータを保存エリアのサイズに合わせるために、データの一部を捨てること 。 図 丸めとは 丸め操作をする際に発生する誤差が丸め誤差。 浮動小数点の仮数部のサイズに収まらない値(循環小数のように小数点以下の数字がいつまでも続くような値)は丸め誤差が発生する。 図 丸め操作により丸め誤差が発生する コンピュータでは2のxx乗で表せない小数は丸め誤差が発生する。 次回は テストはしません。 誤差の続きをやります。

5月23日(金)1コマ目

イメージ
今日、やったこと [確認テスト]浮動小数点形式 [練習問題]ビットシフト [練習問題 解説]ビットシフト 今日のホワイトボード [練習問題 解説]ビットシフト 問1 とくにややこしいことはないかと。 図 [練習問題]ビットシフト 問1 問2 符号ありの左シフトなので、算術シフト。 図 [練習問題]ビットシフト 問2 問3 16進数1ケタは4ビットの2進数で表すことができる。 レジスタは16ビット長なので、1ケタ=4ビット。 図 [練習問題]ビットシフト 問3 問4 ×2nになるように変形するところがポイント。 図 [練習問題]ビットシフト 問4 問5 負数->絶対値の2の補数で表す。 符号付きの2進数->最上位ビットが1なら負数。 図 [練習問題]ビットシフト 問5 次回は ビットシフトのテストをします。 

5月12日(月)1コマ目

イメージ
今日、やったこと 浮動小数点形式(2進数->10進数) ビットシフト 今日のホワイトボード 浮動小数点形式の2進数を10進数へ 前回は10進数の実数を単精度浮動小数点形式の2進数へ変換した。 今日はその逆パターン。 ポイントは 指数部にはバイアス値127が加算された値が格納されている 可数部は小数点以下が格納されている です。 問6 符号ビットが1なので、負数。 8ビットの指数を10進数にした結果から バイアス値127を引く ことを忘れずに。 仮数は 1. 1001。 図 問6 問7 問6と同じ。 図 問7 ビットシフト ビット列を左右にずらすこと。 左シフトは左にずらす。 右シフトは右にずらす。 左シフト ビット列を指定ビット数だけ左にずらす。 右側にできた空白ビットには0を代入。 図 左シフト 右シフト ビット列を指定ビット数だけ右にずらす。 左側にできた空白ビットになにを代入するかで、 論理シフト 算術シフト の2種類がある。 右シフト(論理シフト) ビット列を指定ビット数だけ右にずらす。 左側にできた空白ビットに 0を代入 する。 右シフトするビット列が符号なしの場合は論理シフト。 図 右シフト(論理シフト) 右シフト(算術シフト) ビット列を指定ビット数だけ右にずらす。 左側にできた空白ビットに 符号ビットと同じ値を代入 する。 右シフトするビット列が符号ありの場合は算術シフト。 図 右シフト(算術シフト) 左シフトはかけ算 左シフトはかけ算のためにつかわれる。 N進数をmビット左シフト = xN m 図 左シフトはかけ算 右シフトはわり算 右シフトは論理、算術いずれも、わり算のためにつかわれる。 N進数をmビット右シフト = ÷N m 図 右シフトはわり算 例1 符号なしの011010(10進数では26)を右に2ビットシフト 符号なしなので、論理シフト。シフト後は 000110。 10進数にすると6。 右に2ビットシフト=÷2 2 よって、26÷4をしたことになる。答えは6(小数点以下はなし) 例2 符号なしの101010(10進数では42)を右に2ビットシフト 符号なしなので、論理シフト。シフト後は 001010。 10進数にすると10。 右に2ビットシフト=÷2 2 よって、42÷4をしたことになる。答えは10(小数点以下はなし) 例3 符号あ...

5月9日(金)1コマ目

イメージ
今日、やったこと [確認テスト]符号付き2進数->10進数 浮動小数点 今日のホワイトボード 固定小数点形式と浮動小数点形式 いずれも実数の表現方法。 固定小数点形式は小数点の位置を固定する。 たとえば、下図のように4ケタで表す際に、小数点の位置を真ん中(2ケタ目と3ケタ目の間)に固定して表現する。 図 固定小数点形式 浮動小数点は小数点の位置が可変。 図 浮動小数点形式 なお、浮動小数点形式は 仮数(かすう)部 指数(しすう)部 で構成される。 10進数の実数を2進数へ変換 10進数46.875を浮動小数点形式(単精度)の2進数へ変換する。 46.875を1.xx × 2 n にする。 図 10進数46.875を2進数の1.xx X 2 n へ ①10進数46875を2進数へ これは以前やったやりかたで。 整数部分、小数部分をそれぞれ2進数へ。 101110.111になる。 ②2進数101110.111を1.xx X 2 n へ 小数点の位置を移動させると、  1.01110111 X 2 5 になる。 図 10進数46.875を2進数(単精度浮動小数点形式)へ ③1.01110111 X 2 5 を単精度浮動小数点形式のフォーマットへ 単精度浮動小数点形式のフォーマットで決められた形へ。  符号部・・正の値なので、0  指数部・・指数の5に バイアス値127を足した 結果を8ビット2進数へ  可数部・・1.01110111のうち、 小数部分だけ 図 1.01110111x2 5 を単精度浮動小数点のフォーマットへ 次回は 次回は5/12(月)1コマ目にやります。 (もともとのデータ通信工学は5/16(金)1コマ目へ) 浮動小数点のつづき。

5月7日(水)1コマ目

イメージ
今日、やったこと [確認テスト] 補数(基数の補数・減基数の補数) [確認テスト]10進数->2進数(負数は絶対値の2の補数で表す) 2進数(負数は絶対値の2の補数で表す)->10進数 今日のホワイトボード 2進数(負数は絶対値の2の補数で表す)->10進数 手順は以下のとおり。 ①最上位ビットを確認  0なら0または正の数 -> そのまま10進数へ  1なら負の数 <- 絶対値の2の補数になっている -> ②へ ②2の補数を絶対値へ  プラス1ケタの最小値との引き算を行う。  元の2進数が3ビットなら4ビットの最小値1000との引き算  元の2進数が5ビットなら6ビットの最小値100000との引き算 ③絶対値(2進数)を10進数へ  いままで同じ。 ④符号(-)をつける  負数なので。 図 2進数(負数は絶対値の2の補数で表す)->10進数 例 3ビット符号ありの2進数101を10進数へ ①最上位ビットを確認  最上位ビットは1なので、負数 -> 101は絶対値の2の補数 ②2の補数->絶対値へ  4ビット最小値1000から101を引く。  結果は011。 ③011を10進数へ <- 絶対値  2進数011を10進数へ変換すると、3。 ④符号をつける  -3 図 符号あり2進数101を10進数へ なぜ、負数を2の補数で表す? 減算を加算で行うため 。 下図のように、6-2を6+(-2)で計算する際、-2を絶対値2の2の補数で表して、足し算で計算することができる。 図 6-2を6+(-2)で計算 ちなみに、10進数でも同じことができる。 図 10進数の場合 次回は テストをします。

5月2日(金)3コマ目

イメージ
今日、やったこと 基数の補数、減基数の補数 10進数の負数->2進数 今日のホワイトボード 基数の補数 足すとケタ上がりする数のうち、最小の数。 10進数の場合 足すと、10(1ケタの場合)、100(2ケタの場合)、1000(3ケタの場合)になる数。 図 基数の補数(10進数の場合) 10進数における基数の補数を10の補数と呼ぶこともある。 6進数の場合 足すと、10(1ケタの場合)、100(2ケタの場合)、1000(3ケタの場合)になる数。 図 基数の補数(6進数の場合) 6進数における基数の補数を6の補数と呼ぶこともある。 減基数の補数 足すとケタ上がりしない最大の数。 10進数の場合 足すと、9(1ケタの場合)、99(2ケタの場合)、999(3ケタの場合)になる数。 図 減基数の補数(10進数の場合) 10進数における減基数の補数を9の補数と呼ぶこともある。 6進数の場合 足すと、5(1ケタの場合)、55(2ケタの場合)、555(3ケタの場合)になる数。 図 減基数の補数(6進数の場合) 6進数における減基数の補数を5の補数と呼ぶこともある。 2進数の基数の補数(2の補数)を求める 以下の2パターンの方法がある。 ダイレクトに2の補数を求める 1の補数から2の補数を求める ダイレクトに2の補数を求める 2進数における基数の補数(2の補数)は  足すとケタ上がりする最小の数 なので、足すと10(1ケタの場合)、100(2ケタの場合)、1000(3ケタの場合)になる数。 よって、10や100、1000から引き算をすれば基数の補数を求めることができる。 図 2進数の基数の補数を求める その1 1の補数から2の補数を求める 基数の補数と減基数の補数は  基数の補数 = 減基数の補数+1  減基数の補数=基数の補数-1 で求めることができる。 2進数における基数の補数、減基数の補数は  基数の補数・・2の補数  減基数の補数・・1の補数 と呼ぶ。 2進数の基数の補数(2の補数)を求めるには ①1の補数を求める  1の補数はもとの2進数のビットを反転するだけでOK。 ②1の補数+1  1の補数+1で2の補数になる 図 2進数の基数の補数を求める その2 10進数の負数を2進数へ コンピュータでは負数を絶対値の2の補数で表すことが多い。 10進数の負数は以下の手順で2...