diff --git a/code/include/binform17.hh b/code/include/binform17.hh
new file mode 100644
index 0000000000000000000000000000000000000000..d52ff9f5c779014322002c6b7eb1cba409469a76
--- /dev/null
+++ b/code/include/binform17.hh
@@ -0,0 +1,49 @@
+#include <iostream>
+#include <bitset>
+#include <cstddef>
+#include <iomanip>
+
+namespace cxx2022 {
+using byte = unsigned char;
+ 
+template <class T>
+auto bits(T var)
+{
+    std::remove_cv_t<std::remove_reference_t<T>> loc{var};
+    unsigned long bytes{0UL};
+    byte* in = reinterpret_cast<byte *>(&loc);
+    byte* out = reinterpret_cast<byte *>(&bytes);
+    std::copy(in, in + sizeof(loc), out);
+    return std::bitset<8*sizeof(decltype(loc))>(bytes) ;
+}
+
+void showbits(double var)
+{
+    std::cout << "bits for double value " << var << "\n";
+    auto b = bits(var).to_string();
+    std::cout << "raw = " << b << "\n";
+    std::cout << "sign  exponent          mantissa\n" 
+              << std::setw(6) << std::left << b[0]
+              << std::setw(16) << std::left << b.substr(1UL, 11) 
+              << "  " << b.substr(12) << "\n\n";
+}
+
+void showbits(float var)
+{
+    std::cout << "bits for float value " << var << "\n";
+    auto b = bits(var).to_string();
+    std::cout << "raw = " << b << "\n";
+    std::cout << "sign  exponent          mantissa\n" 
+              << std::setw(6) << std::left << b[0]
+              << std::setw(16) << std::left << b.substr(1UL, 8) 
+              << "  " << b.substr(9) << "\n\n";
+}
+
+template <class T>
+void showbits(T var)
+{
+    std::cout << "bits for " << var << " with non-floating point type : " << bits(var) << "\n";
+}
+
+}
+