mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-10-03 18:09:02 -04:00
156 lines
3.3 KiB
C++
156 lines
3.3 KiB
C++
//
|
||
// FILE: float16_test0.ino
|
||
// AUTHOR: Rob Tillaart
|
||
// PURPOSE: test float16
|
||
// DATE: 2015-03-11
|
||
// URL: https://github.com/RobTillaart/float16
|
||
//
|
||
|
||
/*
|
||
SIGN EXP MANTISSA
|
||
0 01111 0000000000 = 1
|
||
0 01111 0000000001 = 1 + 2−10 = 1.0009765625 (next smallest float after 1)
|
||
1 10000 0000000000 = −2
|
||
|
||
0 11110 1111111111 = 65504 (max half precision)
|
||
|
||
0 00001 0000000000 = 2−14 ≈ 6.10352 × 10−5 (minimum positive normal)
|
||
0 00000 1111111111 = 2−14 - 2−24 ≈ 6.09756 × 10−5 (maximum subnormal)
|
||
0 00000 0000000001 = 2−24 ≈ 5.96046 × 10−8 (minimum positive subnormal)
|
||
|
||
0 00000 0000000000 = 0
|
||
1 00000 0000000000 = −0
|
||
|
||
0 11111 0000000000 = infinity
|
||
1 11111 0000000000 = −infinity
|
||
|
||
0 01101 0101010101 = 0.333251953125 ≈ 1/3
|
||
*/
|
||
|
||
|
||
#include "float16.h"
|
||
|
||
|
||
void setup()
|
||
{
|
||
while(!Serial);
|
||
Serial.begin(115200);
|
||
Serial.println(__FILE__);
|
||
Serial.print("FLOAT16_LIB_VERSION: ");
|
||
Serial.println(FLOAT16_LIB_VERSION);
|
||
Serial.println("\nStart ");
|
||
|
||
Serial.println();
|
||
|
||
test_constructors();
|
||
test_numbers();
|
||
test_binary();
|
||
test_toDouble();
|
||
|
||
Serial.println("\ndone...");
|
||
}
|
||
|
||
|
||
void loop()
|
||
{
|
||
}
|
||
|
||
|
||
void test_constructors()
|
||
{
|
||
Serial.println("\ntest_constructors:");
|
||
float16 a;
|
||
Serial.println(a.toDouble(), 9);
|
||
Serial.println(a.getBinary(), HEX);
|
||
|
||
float16 b = 6;
|
||
Serial.println(b.toDouble(), 9);
|
||
Serial.println(b.getBinary(), HEX);
|
||
|
||
float16 e(EULER);
|
||
Serial.println(e.toDouble(), 9);
|
||
Serial.println(e.getBinary(), HEX);
|
||
|
||
float16 f(e);
|
||
Serial.println(f.toDouble(), 9);
|
||
Serial.println(f.getBinary(), HEX);
|
||
|
||
f = 1.61803398875; // golden ratio
|
||
Serial.println(f.toDouble(), 9);
|
||
Serial.println(f.getBinary(), HEX);
|
||
|
||
Serial.println();
|
||
}
|
||
|
||
|
||
void test_toDouble()
|
||
{
|
||
Serial.println("\ntest_toDouble:");
|
||
float16 f(3.1415);
|
||
Serial.println(f.toDouble(), 9); // 3.14
|
||
f.setBinary(0x0000);
|
||
Serial.println(f.toDouble(), 9); // 0
|
||
f.setBinary(0xFC00);
|
||
Serial.println(f.toDouble(), 9); //-inf
|
||
f.setBinary(0x7C00);
|
||
Serial.println(f.toDouble(), 9); // inf
|
||
f.setBinary(0x3C00);
|
||
Serial.println(f.toDouble(), 9); // 1
|
||
f.setBinary(0x3C01);
|
||
Serial.println(f.toDouble(), 9); // 1.0009765625
|
||
f.setBinary(0x3555);
|
||
Serial.println(f.toDouble(), 9); // 0.333333
|
||
Serial.println();
|
||
}
|
||
|
||
|
||
void test_binary()
|
||
{
|
||
Serial.println("\ntest_binary:");
|
||
float16 e(3.1415);
|
||
float16 f(0);
|
||
Serial.println(e.toDouble(), 9);
|
||
f.setBinary(e.getBinary());
|
||
Serial.println(f.toDouble(), 9);
|
||
Serial.println();
|
||
}
|
||
|
||
|
||
void test_numbers()
|
||
{
|
||
Serial.println("\ntest_numbers:");
|
||
Serial.println("** ZERO **");
|
||
float16 a(0);
|
||
Serial.println(a.toDouble(), 9);
|
||
|
||
Serial.println("** SUBNORMAL **");
|
||
float16 b(1 / 1000.0);
|
||
Serial.println(b.toDouble(), 9);
|
||
|
||
Serial.println("** NORMAL **");
|
||
float16 c(1 / 2000.0);
|
||
Serial.println(c.toDouble(), 9);
|
||
|
||
c = 1/3.0;
|
||
Serial.println(c.toDouble(), 9);
|
||
|
||
float16 d(1);
|
||
Serial.println(d.toDouble(), 9);
|
||
|
||
float16 e(PI);
|
||
Serial.println(e.toDouble(), 9);
|
||
|
||
Serial.println("** OVERFLOW **");
|
||
float16 f(1000000.0);
|
||
Serial.println(f.toDouble(), 9);
|
||
|
||
Serial.println("** UNDERFLOW **");
|
||
float16 g(1 / 1000000.0);
|
||
Serial.println(g.toDouble(), 9);
|
||
|
||
Serial.println();
|
||
}
|
||
|
||
|
||
// -- END OF FILE --
|