Working with Binary Data in Python
5 stars based on
Create a program that takes a decimal floating point number and displays its binary representation and vice versa: L2 as well as just say "Invalid input" or similar. Here however a possible base may extend beyond just the decimal digits, so it is no longer possible to rely on zero to nine only and their associated character codes, thus the "digit" is now identified by indexing into an array of digits, thereby enabling "A" to follow "9" without character code testing.
The original routine was intended for usages in the hundreds of millions of calls, so this version would be unsuitable! In handling this, the exponent part was added to DD and who knows, the result may produce a zero DD as in " Few numbers are presented with more than sixteen fractional digits, but I have been supplied data supposedly on electric power consumption via the national grid with values such as 1.
It is better to risk one only, at the end. In a more general situation the text would first have to be scanned to span the number part, binary hex representation in mathematica and pythons incurring double handling. The codes for hexadecimal, octal and binary formats do not read or write numbers in those bases, they show the bit pattern of the numerical storage format instead, and for floating-point numbers this is very different.
Note the omitted high-order bit in the normalised binary floating-point format - a further complication. Rather than mess about with invocations, the test interprets the texts firstly as base ten sequences, then base two. It makes no complaint over encountering the likes of "" when commanded to absorb according to base two.
The placewise notation is straightforward: Note again that a decimal value in binary is almost always a recurring sequence and that the exact decimal value of the actual binary sequence in the computer of finite length is not the same binary hex representation in mathematica and pythons the original decimal value. In this draft, the task does not give any guidelines for handling precision. So we will use 99 places after the decimal point and trim any trailing zeros and the decimal point, for integer case.
Also, since J does not have a "Decimal floating point number" data type, we will use a list of characters to represent a decimal or binary number this corresponds roughly with the relevant feature set of REXX which seems to have had a strong influence on this draft of this taskand use internal mantissa,exponent representations during the conversion.
Well, I am no expert in OCaml, and my code may seem a bit messy, but I actually took a rather naive aproach Anyway, the program seems to work, but the algorithm s can probably be improved. After reading the discussion, I took into account the suggestion that the program should perform conversions from any base to any other base. The binary to number conversion is easy because it's supported by Racket. Racket only supports the number to binary conversion for integer numbers, so we multiply the original number by a power of two, to get all the binary digits, and then we manipulate the string to place the point in the correct place.
Bases up to 62 will just use decimal digits along with upper and lowercase Latin letters. This REXX program is a modified version of the original program which can handle any base no limitand the original program did more extensive error checking.
Bases that are negative are also supported which won't be explained here. By far the easiest way to do this is to use Tcl's built-in handling of Binary hex representation in mathematica and pythons arithmetic, converting the IEEE representation into the string representation we want and vice versa by simple string manipulations.
Adapting the code to work with IEEE double-precision floats is left as an exercise for the reader, as is dealing with the trickier special cases of the infinities and NaN.