Ora, numeri fluttuanti e precisione doppia, sebbene possano approssimare qualsiasi tipo di numero (sebbene lo stesso si possa dire interi, i float sono solo più precisi), sono rappresentati come decimali binari internamente . Ad esempio, un decimo sarebbe approssimataCome estrarre la frazione diadica dal galleggiante
0.00011001100110011... (... only goes to computers precision, not infinity)
Ora, qualsiasi numero in binario con i bit finito come qualcosa che si chiama un dyadic fraction
rappresentazione in matematica (non ha nulla a che fare con la p-adica). Ciò significa che lo rappresenti come una frazione, in cui il denominatore è un potere di 2. Ad esempio, diciamo che il nostro computer si approssima di un decimo come 0,00011. La frazione diadica per questo è 3/32
o 3/(2^5)
, che è vicino a un decimo. Ora per la mia domanda tecnica. Quale sarebbe il modo più semplice per estrarre la frazione diadica da un numero mobile.
Nota irrilevante: se ti stai chiedendo perché vorrei farlo, è perché sto creando una libreria di numeri surreali in Haskell. Le frazioni diadiche sono facilmente traducibili in numeri surreali, motivo per cui è conveniente che il binario sia facilmente tradotto in diadica, (comunque avrò problemi con i numeri razionali)
+1 per una libreria di numeri surreali per Haskell. –
Sarebbe solo Surreals tale che i set left e right sono numerabili. – PyRulez
Probabilmente solo quelli in cui gli insiemi di sinistra e di destra sono enumerabili, ma dovrebbe essere sufficiente per chiunque. :) –