| Bytes | Lang | Time | Link |
|---|---|---|---|
| 066 | TSQL | 240517T011330Z | CrSb0001 |
| 063 | Python 3.8+ | 250505T172052Z | CrSb0001 |
| 011 | Uiua 0.11.0 | 240520T135715Z | RomanPro |
| 052 | Factor | 210401T233717Z | Bubbler |
| 041 | R | 180914T194156Z | Giuseppe |
| 066 | Factor | 210329T202941Z | user |
| 013 | Husk | 201005T170346Z | Razetime |
| 020 | J | 181111T044236Z | Jonah |
| 071 | C++ | 180917T073352Z | HatsuPoi |
| 066 | D | 181110T200232Z | Adalynn |
| 036 | x86 machine code | 181026T142821Z | user3604 |
| 069 | C# .NET Core | 181017T205541Z | Meerkat |
| 040 | Haskell | 180914T154438Z | Delfad0r |
| 060 | APLNARS | 181003T155205Z | user5898 |
| 004 | MathGolf | 180914T140955Z | maxb |
| 008 | Stax | 180926T232159Z | recursiv |
| 015 | APL Dyalog Unicode | 180918T143154Z | J. Sall& |
| 022 | Wolfram Language Mathematica | 180918T131438Z | alephalp |
| 028 | Excel 28 Bytes | 180914T195626Z | Keeta - |
| 018 | ><> | 180917T114150Z | PidgeyUs |
| 008 | MATL | 180915T004647Z | Giuseppe |
| 030 | Java JDK 10 | 180917T093941Z | Olivier |
| 031 | Ruby | 180917T101046Z | G B |
| 071 | Python 3 | 180915T172536Z | Josh B. |
| 008 | 05AB1E | 180914T140227Z | Emigna |
| 025 | Haskell | 180915T054412Z | xnor |
| 033 | Python 3 | 180915T054220Z | xnor |
| 038 | Perl 6 | 180915T003717Z | Jo King |
| 019 | Perl 6 | 180915T002553Z | nwellnho |
| 053 | Perl 5 a | 180914T222924Z | Xcali |
| 064 | Java 10 | 180914T182829Z | TCFP |
| 044 | Python 2 | 180914T204208Z | Chas Bro |
| 091 | Racket | 180914T161059Z | Jonathan |
| 076 | Appleseed | 180914T193632Z | DLosc |
| 426 | Shakespeare Programming Language | 180914T192853Z | JosiahRy |
| 030 | JavaScript Node.js | 180914T185525Z | Neil |
| 073 | Batch | 180914T184547Z | Neil |
| 082 | Zephyr | 180914T183903Z | DLosc |
| 042 | Ruby | 180914T180003Z | Kirill L |
| 051 | Python 3 | 180914T155327Z | Jonathan |
| 068 | Java 10 | 180914T144028Z | Kevin Cr |
| 044 | JavaScript ES6 | 180914T153154Z | Arnauld |
| 066 | Python 2 | 180914T152233Z | Rushabh |
| 063 | C gcc | 180914T152406Z | Annyo |
| 032 | Haskell | 180914T142538Z | nimi |
| 040 | PowerShell | 180914T142350Z | AdmBorkB |
| 009 | Jelly | 180914T140403Z | Dennis |
T-SQL, 84 73 66 bytes
Original attempt (174 bytes)
Second attempt (84 bytes) (working version)
73 byte version
66 byte version
Here uses the closed form$$\frac{x+0.5}{2^{\lfloor\log_2x\rfloor}}-1$$ Code:
DECLARE @ FLOAT=##i##
SELECT(@+.5)/POWER(2,FLOOR(LOG(@)/LOG(2)))-1
My original attempt at this involved using the closed form$$\frac{\operatorname{mod}\left(x+0.5,2^{\lfloor\log_2(x)\rfloor}\right)}{2^{\lfloor\log_2(x)\rfloor}}\\=\frac{x+0.5-2^{\lfloor\log_2(x)\rfloor}\left\lfloor(x+0.5)/2^{\lfloor\log_2(x)\rfloor}\right\rfloor}{2^{\lfloor\log_2(x)\rfloor}}\\=\frac{x+0.5-2^{\lfloor\ln x/\ln2\rfloor}\lfloor(x+0.5)/2^{\lfloor\ln x/\ln2\rfloor}\rfloor}{2^{\lfloor\ln x/\ln2\rfloor}}$$but I highly doubt that this would have qualified since there was really bad rounding error that made it only spit out 6 decimal places.
Python 3.8+, 64 63 bytes
import math
x=int(input());print((x+.5)/2**int(math.log2(x))-1)
Didn't think that this would save any bytes off of @JoshB.'s 71 byte Python 3 answer, but apparently it does :)
Uiua 0.11.0, 11 bytes
Accepts N, returns the numerator of the Nth term first, then the denominator.
⟜◿⍜ₙ⌊2.+1×2
Try it out!
Not only does it work on scalars, it works on arrays! In other words, it's pervasive.
F ← ⟜◿⍜ₙ⌊2.+1×2
F 19
### 7
### 32
F [13 6 9]
### [11 5 3]
### [16 8 16]
Factor, 52 bytes
{ 1/2 } [ dup stack. dup 1 v+n append 2 v/n t ] loop
Prints each fraction on its own line forever. Keeps track of the array of all terms with equal denominator.
{ 1/2 } ! Push the initial array
[ ... t ] loop ! Loop forever:
dup stack. ! Print all fractions separated by a newline
dup 1 v+n ! Copy and add 1 to all fractions
append 2 v/n ! Join and halve all fractions
R, 42 41 bytes
function(n)2*c(y<-2^(log2(n)%/%1),n-y+.5)
-1 byte thanks to Robin Ryder
Returns a pair Denominator,Numerator. Uses the formula
\$\begin{equation}N = 2\times\left(n-2^{\lfloor \log_2(n)\rfloor}\right)+1\end{equation}\$ from the Josephus sequence and \$\begin{equation}D = 2^{\lfloor \log_2(n)\rfloor+1}\end{equation}\$ from the other sequence. Happily we are able to re-use the denominator as the two formulas have quite a lot in common!
Factor, 68 66 bytes
Saved 2 bytes thanks to @chunes
[ 1 2 [ 2dup / . [ 2 + ] dip 2dup > [ 2 * 1 swap ] when t ] loop ]
Outputs the sequence infinitely.
[
1 2 ! First numerator and denominator
[ ! Loop body
2dup / ! Divide to get next element of sequence
. ! Print the element
[ 2 + ] dip ! Add 2 to the numerator
2dup > ! If numerator > denominator
[
2 * ! Multiply denominator by 2
1 swap ! Set numerator to 1
]
when ! Functions like an if statement
t ! Push true on the stack so the loop doesn't stop
]
loop ! Run while top of stack is true (which is forever)
]
Husk, 13 bytes
ṁz*İ1zR:1İ2ݽ
Abuses the built in sequences to the fullest.
Outputs an infinite list.
Explanation
ṁz*İ1zR:1İ2ݽ
ݽ powers of ½
:1İ2 powers of 2, with 1 prepended
zR zip replicate the second by the first
z* then zip multiply that with:
İ1 odd numbers
ṁ map to each of the power arrays, and concatenate into single list
J, 20 bytes
(>:@+:@#.@}.,2^#)@#:
This verb take n and gives us the nth number in the list. n = 1 produces 1/2, etc...
explanation
(>:@+:@#.@}. , 2 ^ #)@#:
@#: NB. The arg as list of binary digits, feed that to...
, NB. the concatenation of... (first doing the left side)
@}. NB. remove the highest order bit and...
@#. NB. convert back to decimal and...
@+: NB. double it and...
>: NB. add one (now we have the numerator)
2 ^ NB. (now doing the right side) 2 raised to the...
# NB. number of binary digits (the denominator)
C++, 97 75 71 bytes
-26 bytes thanks to tsh, ceilingcat, Zacharý
float f(int i){float d=2,n=1;while(--i)n=d-n==1?d*=2,1:n+2;return n/d;}
Testing code :
std::cout << "1\t:\t" << f(1) << '\n';
std::cout << "2\t:\t" << f(2) << '\n';
std::cout << "3\t:\t" << f(3) << '\n';
std::cout << "4\t:\t" << f(4) << '\n';
std::cout << "10\t:\t" << f(10) << '\n';
std::cout << "100\t:\t" << f(100) << '\n';
std::cout << "511\t:\t" << f(511) << '\n';
std::cout << "512\t:\t" << f(512) << '\n';
D, 66 bytes
T f(T)(T i){T d=2,n=1;while(--i)n=d-n==1?(d*=2)/d:n+2;return n/d;}
Port of @HatsuPointerKun's C++ answer.
grumble Comma expressions are pretty worthless in D grumble
x86 machine code, 36 bytes
00000000: 4389 de46 5653 6800 0000 00e8 fcff ffff C..FVSh.........
00000010: 83c3 0239 f37e edd1 e631 db43 ebe6 2564 ...9.~...1.C..%d
00000020: 2f25 6420 /%d
Prints the sequence infinitely.
The hexdump is unlinked, e.g. the address for printf is a placeholder.
Assembly:
section .text
global func
extern printf
func:
inc ebx ;set numerator to 1
mov esi, ebx
inc esi ;set denominator to 2
loop:
push esi
push ebx
push fmt
call printf
add ebx, 2 ;increment numerator by 2
cmp ebx, esi
jle loop ;if numerator<denominator (eg ebx/esi<1), repeat loop
shl esi, 1 ;double the denominator
xor ebx, ebx
inc ebx ;reset numerator to 1
jmp loop
section .data
fmt db '%d/%d '
C# (.NET Core), 69 bytes
a=>{int b=1,c=2;while(a-->1){b+=2;if(b>c){b=1;c*=2;}}return b+"/"+c;}
Ungolfed:
a=> {
int b = 1, c = 2; // initialize numerator (b) and denominator (c)
while (a-- > 1) // while a decrements to 1
{
b += 2; // add 2 to b
if (b > c) // if b is greater than c:
{
b = 1; // reset numerator to 1
c *= 2; // double denominator
}
}
return b + "/" + c; // return fraction as string
}
Haskell, 40 bytes
s=(1,2):[(i*2+u,j*2)|(i,j)<-s,u<-[-1,1]]
Infinite sequence as pairs of integers (starting from (1,2)).
Quite a bit longer than @nimi's answer, but the approach is completely different, so I decided to post it anyway.
This solution is based on the following observation.
Consider the infinite sequence $$ \left\{\frac{1}{2},\frac{1}{4},\frac{3}{4},\frac{1}{8},\frac{3}{8},\frac{5}{8},\frac{7}{8},\frac{1}{16},\frac{3}{16},\ldots\right\} $$ and apply the following steps.
- Replace every number \$\frac{i}{j}\$ in the sequence with the list \$\left\{\frac{2i-1}{2j},\frac{2i+1}{2j}\right\}\$: $$ \left\{\left\{\frac{1}{4},\frac{3}{4}\right\},\left\{\frac{1}{8},\frac{3}{8}\right\},\left\{\frac{5}{8},\frac{7}{8}\right\},\left\{\frac{1}{16},\frac{3}{16}\right\},\ldots\right\} $$
- Join all the lists into a single sequence: $$ \left\{\frac{1}{4},\frac{3}{4},\frac{1}{8},\frac{3}{8},\frac{5}{8},\frac{7}{8},\frac{1}{16},\frac{3}{16},\ldots\right\} $$
- Add \$\frac{1}{2}\$ at the beginning of the sequence: $$ \left\{\frac{1}{2},\frac{1}{4},\frac{3}{4},\frac{1}{8},\frac{3}{8},\frac{5}{8},\frac{7}{8},\frac{1}{16},\frac{3}{16},\ldots\right\} $$
Notice how you get back to the sequence you started with!
The solution exploits this fact (together with Haskell's laziness) to compute the sequence s.
APL(NARS), 30 chars, 60 bytes
{⍵=0:0⋄(1+2×⍵-2*k)÷2*1+k←⌊2⍟⍵}
test:
f←{⍵=0:0⋄(1+2×⍵-2*k)÷2*1+k←⌊2⍟⍵}
f¨0 1 2 3 4 5 6 7 8
0 0.5 0.25 0.75 0.125 0.375 0.625 0.875 0.0625
f¨511 512 10023
0.998046875 0.0009765625 0.2235717773
MathGolf, 5 4 bytes
╫\╨]
How it would look like with the operator working correctly
╫\)╨] (")" adds 1 to TOS, making rounding behave as expected)
Explanation
╫ Left-rotate all bits in input
\ Swap top two elements on stack, pushing the input to the top
╨ Round up to nearest power of 2
] Wrap in array (just for pretty printing)
I took my inspiration from this question to solve the problem, my "own" solution was around 10-12 bytes I think.
I had intended for the round up to closest power of 2 to return the number itself if it was a number of two, but due to a mistake it rounds to the next power of two (e.g. 4 -> 8 instead of 4 -> 4). This will have to be fixed later, but now it saves me one byte.
Stax, 8 bytes
▀`Ö²╬─}t
This program uses stax's rational type. It takes a 1-based integer index as input, and produces that sequence element.
Unpacked, ungolfed, and commented, it looks like this.
Hc double the input and copy it
:GY unset all but the highest bit, and store in register Y
-^ subtract (leaving all the other bits), then increment
yu* push the value in register Y, then multiply by its reciprocal
APL (Dyalog Unicode), 15 bytes
1-⍨.5∘+÷2*∘⌊2⍟⊢
Anonymous prefix lambda.
Thanks to Adám for 4 bytes and to Cows quack for 2 bytes.
How:
1-⍨.5∘+÷2*∘⌊2⍟⊢ ⍝ Anonymous lambda, argument ⍵ → 10
2⍟⊢ ⍝ Log (⍟) of ⍵ in base 2. 2⍟10 → 3.32192809489...
⌊ ⍝ Floor. ⌊3.32192809489... → 3
2*∘ ⍝ Take that power of 2. 2³ → 8
÷ ⍝ Use that as denominator
.5∘+ ⍝ ⍵ + 0.5 → 10.5. Using that as numerator: 10.5÷8 → 1.3125
1-⍨ ⍝ Swap the arguments (⍨), then subtract. 1-⍨1.3125 → 1.3125-1 → 0.3125
Excel 48 28 Bytes
Saved 20 bytes (!) thanks to tsh
=(A1+0.5)/2^INT(LOG(A1,2))-1
=MOD(A1+0.5,2^(INT(LOG(A1,2))))/2^INT(LOG(A1,2))
Assumes value in A1, output is in decimal. If you want the output to be in fraction, you can create a custom format for the output cell as "0/###0" and it will show it as fraction.
Explanation: Difficult to explain, since there is a shortcut taken to get to this formula. Basically the numerator is a bit shift left of the input, and the denominator is the next power of 2 higher than the number input.
I originally started with Excel built in functions for BITLSHIFT and BITRSHIFT, but they will shift the entire 48 bits which is not what you want. The functions DEC2BIN (and BIN2DEC) have a limit of -512 to 511 (10 bits) so this wouldn't work. Instead I had to rebuild the number with a modulus of the original number, then times two, then add 1 (since the left digit would always be 1 before a shift).
=MOD(A1 Use MOD for finding what the right digits are
+0.5 this will later add the left "1" to the right digits
,2^INT(LOG(A1,2)))) Take Log base 2 number of digits on the right
this creates the numerator divided by 2 (explained later)
/ 2^INT(LOG(A1,2)) The denominator should be 2^ (Log2 + 1) but instead of
adding a 1 here, we cause the numerator to be divided by 2 instead
This gives us a fraction. In the numerator, we also added .5
instead of 1 so that we wouldn't need to divide it in both the
numerator and denominator
Then tsh showed how I could take the int/log out of the mod and remove it from numerator/denominator.
><>, 19 18 bytes
Using xnor's idea, fixed by Jo King, -1 byte by making better use of the mirrors and another -2 bytes by Jo King because the ! was superfluous and ; is not required.
2*1+\1-n
2:,2/?(
MATL, 8 bytes
BnWGEy-Q
Returns Numerator, then Denominator. Uses the same method as my R answer, although it's a bit more efficient.
Explanation, with input 5:
# implicit input 5
B # convert to array of bits
# STACK: [[1 0 1]]
n # length (place of Most Significant Bit)
# STACK: [3]
W # elementwise raise 2^x
# STACK: [8]
G # paste input
# STACK: [8, 5]
E # double
# STACK: [8, 10]
y # copy from below
# STACK: [8, 10, 8]
- # subtract
# STACK: [8, 2]
Q # increment
# STACK: [8, 3]
# implicit end of program, display stack contents
Java (JDK 10), 30 bytes
n->(n+.5)/n.highestOneBit(n)-1
Returns the nth item in the sequence.
This answer is originally a succession of golfs of TCFP's Java answer. In the end, the golfs didn't look like the original answer anymore (though the math used is the same) so I decided to post the golfs as a separate answer instead of simply commenting on the TCFP's answer. So if you like this answer, go upvote TCFP's answer as well! ;-)
Intermediate golfs were:
n->{int x=0;for(;n>>++x!=1;);return((~(1<<x)&n)*2.+1)/(1<<x+1);} // 64 bytes (TCFP's answer when I started golfing)
n->{int x=0;for(;n>>++x!=1;);x=1<<x;return((~x&n)*2.+1)/x/2;} // 61 bytes
n->{int x=n.highestOneBit(n);return((~x&n)*2.+1)/x/2;} // 54 bytes
n->{int x=n.highestOneBit(n);return((~x&n)+.5)/x;} // 50 bytes
n->((n&~(n=n.highestOneBit(n)))+.5)/n // 37 bytes
n->(n-(n=n.highestOneBit(n))+.5)/n // 34 bytes
n->(n+.5)/n.highestOneBit(n)-1 // 30 bytes, current score
Python 3, 71 bytes
n,d=0,1
for t in range(int(input())):
n+=2
if n>d:n=1;d*=2
print(n/d)
Index starts with 0 at 0.0 and 1 at 0.5 and so on.
05AB1E, 11 8 bytes
Saved 3 bytes thanks to Kevin Cruijssen.
∞oDÅÉs/˜
Explanation
∞ # start an infinite list [1...
o # calculate 2**N
D # duplicate
ÅÉ # get a list of odd numbers up to 2**N
s/ # divide each by 2**N
˜ # flatten
Haskell, 25 bytes
pred.until(<2)(/2).(+0.5)
Outputs decimals, one-indexed without the initial zero term.
Adds 0.5 to the input, then halves until the results is below 2, then subtracts 1. Using a pointfree expression saves 1 bytes over
f n=until(<2)(/2)(n+0.5)-1
Python 3, 33 bytes
lambda n:(8*n+4)/2**len(bin(n))-1
Outputs decimals, one-indexed without the initial zero term.
Perl 6, 38 bytes
(0,{(1,3...2**@_-1)X/2**@_}...*)>>.say
Outputs elements infinitely, starting from 0.
An infinite sequence itself ends up at 40 bytes
.5,{$/=.nude;($1-$0-1??$0+2!!.5)/$1}...*
Perl 5 -a, 53 bytes
map{say"$_/$.";--$F[0]||exit}grep$_%2,1..$.while$.*=2
1-indexed. First element is 1/2. Outputs the first n elements.
Java 10, 68 64 bytes
First try at code golf!
Option 1: find the n-th element (1-indexed)
-4 bytes thanks to @Kevin Cruijssen
n->{int x=0;for(;n>>++x!=1;);return((~(1<<x)&n)*2.+1)/(1<<x+1);}
This is an anonymous method that finds the n-th term by removing the most significant bit from n, doubling it and adding one, then dividing by the next highest power of 2.
Code walkthrough:
n->{ // builds anonymous function with input n
int x=0; // stores floor of log(n) (base 2) for most significant digit
for(;n>>++x!=1;); // calculates floor of log(n) by counting right shifts until 1
return((~(1<<x)&n) // removes most significant digit of n
*2.+1) // multiplies 2 and adds 1 to get the odd numerator
/(1<<x+1);} // divides by the next highest power of 2 and returns`
Will edit if it's necessary to print the final value instead of returning it.
Python 2, 44 bytes
def f(n):m=2**len(bin(n))/4;return 2*n-m+1,m
Function returns a tuple of (numerator, denominator). An input of 0 is not handled (it was optional).
Racket, 92 91 bytes
(define(f k(m 2)(n 1))(if(> k 0)(if(=(+ n 1)m)(f(- k 1)(+ m m))(f(- k 1)m(+ n 2)))(/ n m)))
- Saved a byte thanks to Giuseppe -- removing superfluous whitespace.
Appleseed, 76 bytes
(def s(lambda((d 2)(n 1))(if(> n d)(s(* d 2))(cons(list n d)(s d(+ n 2))))))
Defines a function s that, when called without arguments, returns an infinite list of (<numer> <denom>) pairs. Try it online!
Ungolfed
(def sequence
(lambda ((denom 2) (numer 1))
(if (less? denom numer)
(sequence (* denom 2))
(cons
(list numer denom)
(sequence denom (+ numer 2))))))
Same idea as Jonathan Frech's Python function (right down to the order of the default arguments being important), except here we cons each result onto the (infinite) recursive call instead of printing it.
Shakespeare Programming Language, 426 bytes
,.Ajax,.Ford,.Act I:.Scene I:.[Exeunt][Enter Ajax and Ford]Ajax:You be the sum ofyou a cat.Ford:You cat.Scene V:.Ford:Is twice you nicer I?If solet usScene X.You be twice you.Let usScene V.Scene X:.Ford:Remember twice you.You be the sum oftwice the remainder of the quotient betweenI you a cat.Open heart.You big big big big big cat.Speak thy.Recall.Open heart.You be twice the sum ofa cat a big big cat.Speak thy.Let usAct I.
Outputs the sequence infinitely as both numbers separated by a space, with each item being separated by a newline.
JavaScript (Node.js), 30 bytes
f=(n,d=.5)=>d>n?n/d:f(n-d,d*2)
Try it online! 0-indexed. Started out as a port of my Batch answer but I was able to calculate in multiples of \$\frac{1}{2}\$ which saved several bytes.
Batch, 73 bytes
@set/an=%1*2,d=1
:l
@if %d% leq %1 set/an-=d,d*=2&goto l
@echo %n%/%d%
Outputs 0/1 for an input of 0. Explanation: n is the numerator and d is the denominator. d is doubled each time until it exceeds the input, and the previous value of d is subtracted from n as it goes. This is slightly golfier than calculating n=%1*2+1-d separately.
Zephyr, 82 bytes
set d to 2
while 1=1
for n from 1 to d/2
print((2*n)-1)/d
next
set d to d*2
repeat
Iterate over denominators 2, 4, 8, 16, ... forever. For each d (e.g. 8), iterate n from 1 up to d/2 (e.g. 1, 2, 3, 4). The desired odd-number numerators are then 2*n-1. Zephyr's built-in rational numbers mean we just do the division and print the result.
(I really think more languages should have built-in rational numbers!)
Ruby, 42 bytes
1.step{|i|(1..x=2**i).step(2){|j|p [j,x]}}
Prints integer pairs infinitely, starting from 1/2.
Python 3, 53 51 bytes
- Saved two bytes thanks to mypetlion; reusing default parameters to reset
n.
def f(m=2,n=1):n<m and print(n/m)&f(m,2+n)or f(m+m)
Java 10, 89 85 70 69 68 bytes
v->{for(float j,t=2;;t*=2)for(j=1;j<t;j+=2)System.out.println(j/t);}
Port of @Emigma's 05AB1E answer, so outputs decimals indefinitely as well.
-15 bytes thanks to @Arnauld.
Explanation:
v->{ // Method with empty unused parameter and no return-type
for(float j,t=2;; // Loop `t` from 2 upwards indefinitely,
t*=2) // doubling `t` after every iteration
for(j=1;j<t; // Inner loop `j` in the range [1, `t`),
j+=2) // in steps of 2 (so only the odd numbers)
System.out.println( // Print with trailing new-line:
j/t);} // `j` divided by `t`
JavaScript (ES6), 44 bytes
Returns the \$n\$-th term, 1-indexed.
f=(n,p=q=1)=>n?f(n-1,p<q-2?p+2:!!(q*=2)):p/q
Python 2 - 68 66 bytes
-2 bytes thanks to Kevin
from math import*
def g(n):a=2**floor(log(n,2));print(n-a)*2+1,2*a
C (gcc), 63 bytes
No input, prints infinite sequence:
f(i,j){for(i=1,j=2;;i+=2,i>j&&(j*=2,i=1))printf("%d/%d ",i,j);}
Haskell, 35 32 bytes
Edit: -3 bytes thanks to @Delfad0r.
[(y,2^x)|x<-[1..],y<-[1,3..2^x]]
This is an infinite list of integer pairs.
PowerShell, 40 bytes
for($i=2;;$i*=2){1..$i|?{$_%2}|%{$_/$i}}
Outputs the infinite sequence as decimal values. Given language limitations, will eventually run into precision problems, but easily handles the first 1000 entries.
Starts by setting $i=2, then enters a for loop. Each iteration, we construct a range from 1..$i and pull out the odd values with |?{$_%2}. Those are fed into their own inner loop, where we divide each to get the decimal |%{$_/$i}. Those are left on the pipeline and output when the pipeline is flushed after every for iteration. Each iteration we're simply incrementing $i by $i*=2 to get the next go-round.
