mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 75feee0968
			
		
	
	
		75feee0968
		
	
	
	
	
		
			
			git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13944 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			57 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| #  The Computer Language Benchmarks Game
 | |
| #  http://shootout.alioth.debian.org/
 | |
| #
 | |
| #  contributed by Karl von Laudermann
 | |
| #  modified by Jeremy Echols
 | |
| 
 | |
| size = 600 # ARGV[0].to_i
 | |
| 
 | |
| puts "P4\n#{size} #{size}"
 | |
| 
 | |
| ITER = 49                           # Iterations - 1 for easy for..in looping
 | |
| LIMIT_SQUARED = 4.0                 # Presquared limit
 | |
| 
 | |
| byte_acc = 0
 | |
| bit_num = 0
 | |
| 
 | |
| count_size = size - 1               # Precomputed size for easy for..in looping
 | |
| 
 | |
| # For..in loops are faster than .upto, .downto, .times, etc.
 | |
| for y in 0..count_size
 | |
|   for x in 0..count_size
 | |
|     zr = 0.0
 | |
|     zi = 0.0
 | |
|     cr = (2.0*x/size)-1.5
 | |
|     ci = (2.0*y/size)-1.0
 | |
|     escape = false
 | |
| 
 | |
|     # To make use of the for..in code, we use a dummy variable,
 | |
|     # like one would in C
 | |
|     for dummy in 0..ITER
 | |
|       tr = zr*zr - zi*zi + cr
 | |
|       ti = 2*zr*zi + ci
 | |
|       zr, zi = tr, ti
 | |
| 
 | |
|       if (zr*zr+zi*zi) > LIMIT_SQUARED
 | |
|         escape = true
 | |
|         break
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     byte_acc = (byte_acc << 1) | (escape ? 0b0 : 0b1)
 | |
|     bit_num += 1
 | |
| 
 | |
|     # Code is very similar for these cases, but using separate blocks
 | |
|     # ensures we skip the shifting when it's unnecessary, which is most cases.
 | |
|     if (bit_num == 8)
 | |
|       print byte_acc.chr
 | |
|       byte_acc = 0
 | |
|       bit_num = 0
 | |
|     elsif (x == count_size)
 | |
|       byte_acc <<= (8 - bit_num)
 | |
|       print byte_acc.chr
 | |
|       byte_acc = 0
 | |
|       bit_num = 0
 | |
|     end
 | |
|   end
 | |
| end
 |