バイアス
日本語 | 偏向 |
英語 | bias |
ふりがな | ばいあす |
フリガナ | バイアス |
ある一方向への移動、もしくは圧力のこと。
一般的な意味としては、公平中立な立場ではなく、どちらか一方に寄った意見を持つこと。
たとえば「家電製品はどこのがいい?」という質問に対して「ソニー製品しかないでしょ」というのは「ソニー製品好きというバイアスが掛かった発言」と言える。
このように、ある傾向に偏っていることを「バイアスが掛かっている」と言う。
これと同じような表現を数値にも行う事がある。
数値をあらかじめ増減しておき、その状態を中心の値と見なすことを「バイアスを掛けておく」と表現する。
たとえば、浮動小数点の指数部は、ビットが00000000000の時に2の-1023乗、11111111111の時に2の1023乗である。
普通の整数値であればビットが0の時に0であるため、それに対して中心の値がずれていることになる。これがつまり「バイアスが掛かっている」状態である。
バイアスを掛けて中心の値をずらすことで、表現できる数を増やすことができる。この例であれば、2の補数を使わなければ負の数を表現できないのに対し、バイアスを掛けることで2の補数を使わずに負の数を表現している。
一般的な意味としては、公平中立な立場ではなく、どちらか一方に寄った意見を持つこと。
たとえば「家電製品はどこのがいい?」という質問に対して「ソニー製品しかないでしょ」というのは「ソニー製品好きというバイアスが掛かった発言」と言える。
このように、ある傾向に偏っていることを「バイアスが掛かっている」と言う。
これと同じような表現を数値にも行う事がある。
数値をあらかじめ増減しておき、その状態を中心の値と見なすことを「バイアスを掛けておく」と表現する。
たとえば、浮動小数点の指数部は、ビットが00000000000の時に2の-1023乗、11111111111の時に2の1023乗である。
普通の整数値であればビットが0の時に0であるため、それに対して中心の値がずれていることになる。これがつまり「バイアスが掛かっている」状態である。
バイアスを掛けて中心の値をずらすことで、表現できる数を増やすことができる。この例であれば、2の補数を使わなければ負の数を表現できないのに対し、バイアスを掛けることで2の補数を使わずに負の数を表現している。
参考サイト
- (参考サイトはありません)
// Sample.java
public class Sample
{
public static void main( String[] args )
{
// 浮動小数点で一番「普通」の値は2.0です。
outputDoubleBit( 2.0 );
// 0 10000000000 0000000000000000000000000000000000000000000000000000
// 1ビット目~11ビット目は指数部、2の累乗が格納されます。
outputDoubleBit( 0.125 );
outputDoubleBit( 0.25 );
outputDoubleBit( 0.5 );
outputDoubleBit( 1.0 );
outputDoubleBit( 2.0 );
outputDoubleBit( 4.0 );
outputDoubleBit( 8.0 );
outputDoubleBit( 16.0 );
// 0 01111111100 0000000000000000000000000000000000000000000000000000
// 0 01111111101 0000000000000000000000000000000000000000000000000000
// 0 01111111110 0000000000000000000000000000000000000000000000000000
// 0 01111111111 0000000000000000000000000000000000000000000000000000
// 0 10000000000 0000000000000000000000000000000000000000000000000000
// 0 10000000001 0000000000000000000000000000000000000000000000000000
// 0 10000000010 0000000000000000000000000000000000000000000000000000
// 0 10000000011 0000000000000000000000000000000000000000000000000000
// 指数のビットは、整数とほぼ同じです。
// 01111111100 : 0.125 : 2の-3乗 :
// 01111111101 : 0.25 : 2の-2乗
// 01111111110 : 0.5 : 2の-1乗
// 01111111111 : 1.0 : 2の 0乗 ↓指数部の値を2進数で表現した場合。
// 10000000000 : 2.0 : 2の 1乗 : 0001
// 10000000001 : 4.0 : 2の 2乗 : 0010
// 10000000010 : 8.0 : 2の 3乗 : 0100
// 10000000011 : 16.0 : 2の 4乗 : 1000
// このように、ビットは「累乗」を表しています。
// ただし、2の-1023乗の時に00000000000、
// 2の1023乗の時に11111111111となります。
// つまり、ビット的にバイアスを掛けておくことで、
// 2の補数を使わずに負の値を表現しているわけです。
}
/**
* double型変数をビット形式で出力します。
*/
private static void outputDoubleBit( double d )
{
// double型変数をビット形式で文字列化します。
String source = Long.toBinaryString( Double.doubleToLongBits( d ) );
// 左0埋めします。
StringBuffer strbuf = new StringBuffer();
for( int iF1 = source.length(); iF1 < 64; ++iF1 )
{
strbuf.append( "0" );
}
strbuf.append( source );
// 符号、仮数部、指数部の間にスペースを入れます。
strbuf.insert( 12, " " );
strbuf.insert( 1, " " );
System.out.println( strbuf.toString() );
}
}
public class Sample
{
public static void main( String[] args )
{
// 浮動小数点で一番「普通」の値は2.0です。
outputDoubleBit( 2.0 );
// 0 10000000000 0000000000000000000000000000000000000000000000000000
// 1ビット目~11ビット目は指数部、2の累乗が格納されます。
outputDoubleBit( 0.125 );
outputDoubleBit( 0.25 );
outputDoubleBit( 0.5 );
outputDoubleBit( 1.0 );
outputDoubleBit( 2.0 );
outputDoubleBit( 4.0 );
outputDoubleBit( 8.0 );
outputDoubleBit( 16.0 );
// 0 01111111100 0000000000000000000000000000000000000000000000000000
// 0 01111111101 0000000000000000000000000000000000000000000000000000
// 0 01111111110 0000000000000000000000000000000000000000000000000000
// 0 01111111111 0000000000000000000000000000000000000000000000000000
// 0 10000000000 0000000000000000000000000000000000000000000000000000
// 0 10000000001 0000000000000000000000000000000000000000000000000000
// 0 10000000010 0000000000000000000000000000000000000000000000000000
// 0 10000000011 0000000000000000000000000000000000000000000000000000
// 指数のビットは、整数とほぼ同じです。
// 01111111100 : 0.125 : 2の-3乗 :
// 01111111101 : 0.25 : 2の-2乗
// 01111111110 : 0.5 : 2の-1乗
// 01111111111 : 1.0 : 2の 0乗 ↓指数部の値を2進数で表現した場合。
// 10000000000 : 2.0 : 2の 1乗 : 0001
// 10000000001 : 4.0 : 2の 2乗 : 0010
// 10000000010 : 8.0 : 2の 3乗 : 0100
// 10000000011 : 16.0 : 2の 4乗 : 1000
// このように、ビットは「累乗」を表しています。
// ただし、2の-1023乗の時に00000000000、
// 2の1023乗の時に11111111111となります。
// つまり、ビット的にバイアスを掛けておくことで、
// 2の補数を使わずに負の値を表現しているわけです。
}
/**
* double型変数をビット形式で出力します。
*/
private static void outputDoubleBit( double d )
{
// double型変数をビット形式で文字列化します。
String source = Long.toBinaryString( Double.doubleToLongBits( d ) );
// 左0埋めします。
StringBuffer strbuf = new StringBuffer();
for( int iF1 = source.length(); iF1 < 64; ++iF1 )
{
strbuf.append( "0" );
}
strbuf.append( source );
// 符号、仮数部、指数部の間にスペースを入れます。
strbuf.insert( 12, " " );
strbuf.insert( 1, " " );
System.out.println( strbuf.toString() );
}
}
// Sample.java public class Sample { public static void main( String[] args ) { // 浮動小数点で一番「普通」の値は2.0です。 outputDoubleBit( 2.0 ); // 0 10000000000 0000000000000000000000000000000000000000000000000000 // 1ビット目~11ビット目は指数部、2の累乗が格納されます。 outputDoubleBit( 0.125 ); outputDoubleBit( 0.25 ); outputDoubleBit( 0.5 ); outputDoubleBit( 1.0 ); outputDoubleBit( 2.0 ); outputDoubleBit( 4.0 ); outputDoubleBit( 8.0 ); outputDoubleBit( 16.0 ); // 0 01111111100 0000000000000000000000000000000000000000000000000000 // 0 01111111101 0000000000000000000000000000000000000000000000000000 // 0 01111111110 0000000000000000000000000000000000000000000000000000 // 0 01111111111 0000000000000000000000000000000000000000000000000000 // 0 10000000000 0000000000000000000000000000000000000000000000000000 // 0 10000000001 0000000000000000000000000000000000000000000000000000 // 0 10000000010 0000000000000000000000000000000000000000000000000000 // 0 10000000011 0000000000000000000000000000000000000000000000000000 // 指数のビットは、整数とほぼ同じです。 // 01111111100 : 0.125 : 2の-3乗 : // 01111111101 : 0.25 : 2の-2乗 // 01111111110 : 0.5 : 2の-1乗 // 01111111111 : 1.0 : 2の 0乗 ↓指数部の値を2進数で表現した場合。 // 10000000000 : 2.0 : 2の 1乗 : 0001 // 10000000001 : 4.0 : 2の 2乗 : 0010 // 10000000010 : 8.0 : 2の 3乗 : 0100 // 10000000011 : 16.0 : 2の 4乗 : 1000 // このように、ビットは「累乗」を表しています。 // ただし、2の-1023乗の時に00000000000、 // 2の1023乗の時に11111111111となります。 // つまり、ビット的にバイアスを掛けておくことで、 // 2の補数を使わずに負の値を表現しているわけです。 } /** * double型変数をビット形式で出力します。 */ private static void outputDoubleBit( double d ) { // double型変数をビット形式で文字列化します。 String source = Long.toBinaryString( Double.doubleToLongBits( d ) ); // 左0埋めします。 StringBuffer strbuf = new StringBuffer(); for( int iF1 = source.length(); iF1 < 64; ++iF1 ) { strbuf.append( "0" ); } strbuf.append( source ); // 符号、仮数部、指数部の間にスペースを入れます。 strbuf.insert( 12, " " ); strbuf.insert( 1, " " ); System.out.println( strbuf.toString() ); } }