Arduino UNO では、double型 を指定しても float型 で演算します
Arduino DUE では、double型 で演算されるので誤差はでていません
Serial.print で double(float) 表示をする場合 四捨五入がおこなわれ
double(float)型 を int型 に変換した場合 小数が切り捨てられます
確認プログラム
void setup() {
double ans;
unsigned char i;
Serial.begin(9600);
Serial.println("Arduino Program Start !!");
Serial.println("double(float) \t\t\t\t\t\t\t\t unsigned int");
for ( i=0 ; i<=16 ; i++ ){
ans = pow( 2 , i );
Serial.print( ans , 30 );
Serial.print("\t\t");
Serial.print( ans ); // Serial.print( ans , 2 );
Serial.print(" \t");
Serial.print( ans , 0 );
Serial.print("\t\t");
Serial.print( (unsigned int)ans , DEC );
Serial.println();
}
Serial.println("End");
}
void loop() {
}
double(float)型 , 小数第3位を四捨五入 , 小数第1位を四捨五入 , int型へ変換(小数切り捨て)
Arduino UNO 実行結果
Arduino Program Start !!
double(float)
1.000000000000000000000000000000 1.00 1 1
2.000000000000000000000000000000 2.00 2 2
3.999999523162841796875000000000 4.00 4 3
7.999998092651367187500000000000 8.00 8 7
15.999996185302734375000000000000 16.00 16 15
31.999988555908203125000000000000 32.00 32 31
63.999977111816406250000000000000 64.00 64 63
127.999954223632812500000000000000 128.00 128 127
255.999908447265625000000000000000 256.00 256 255
511.999633789062500000000000000000 512.00 512 511
1023.999267578125000000000000000000 1024.00 1024 1023
2047.998535156250000000000000000000 2048.00 2048 2047
4095.997070312500000000000000000000 4096.00 4096 4095
8192.000000000000000000000000000000 8192.00 8192 8192
16383.988281250000000000000000000000 16383.99 16384 16383
32767.976562500000000000000000000000 32767.98 32768 32767
65535.953125000000000000000000000000 65535.95 65536 65535
End
Arduino DUE 実行結果
Arduino Program Start !!
double(float)
1.000000000000000000000000000000 1.00 1 1
2.000000000000000000000000000000 2.00 2 2
4.000000000000000000000000000000 4.00 4 4
8.000000000000000000000000000000 8.00 8 8
16.000000000000000000000000000000 16.00 16 16
32.000000000000000000000000000000 32.00 32 32
64.000000000000000000000000000000 64.00 64 64
128.000000000000000000000000000000 128.00 128 128
256.000000000000000000000000000000 256.00 256 256
512.000000000000000000000000000000 512.00 512 512
1024.000000000000000000000000000000 1024.00 1024 1024
2048.000000000000000000000000000000 2048.00 2048 2048
4096.000000000000000000000000000000 4096.00 4096 4096
8192.000000000000000000000000000000 8192.00 8192 8192
16384.000000000000000000000000000000 16384.00 16384 16384
32768.000000000000000000000000000000 32768.00 32768 32768
65536.000000000000000000000000000000 65536.00 65536 65536
End
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。