mirror of
				https://github.com/golang/go.git
				synced 2025-10-31 16:50:58 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			91 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
| Redistribution and use in source and binary forms, with or without
 | |
| modification, are permitted provided that the following conditions are met:
 | |
| 
 | |
|     * Redistributions of source code must retain the above copyright
 | |
|     notice, this list of conditions and the following disclaimer.
 | |
| 
 | |
|     * Redistributions in binary form must reproduce the above copyright
 | |
|     notice, this list of conditions and the following disclaimer in the
 | |
|     documentation and/or other materials provided with the distribution.
 | |
| 
 | |
|     * Neither the name of "The Computer Language Benchmarks Game" nor the
 | |
|     name of "The Computer Language Shootout Benchmarks" nor the names of
 | |
|     its contributors may be used to endorse or promote products derived
 | |
|     from this software without specific prior written permission.
 | |
| 
 | |
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | |
| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | |
| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | |
| ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | |
| LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | |
| CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | |
| SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | |
| INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | |
| CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | |
| ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | |
| POSSIBILITY OF SUCH DAMAGE.
 | |
| */
 | |
| 
 | |
| /* The Computer Language Shootout
 | |
|    http://shootout.alioth.debian.org/
 | |
| 
 | |
|    contributed by Greg Buchholz
 | |
| 
 | |
|    for the debian (AMD) machine...
 | |
|    compile flags:  -O3 -ffast-math -march=athlon-xp -funroll-loops
 | |
| 
 | |
|    for the gp4 (Intel) machine...
 | |
|    compile flags:  -O3 -ffast-math -march=pentium4 -funroll-loops
 | |
| */
 | |
| 
 | |
| #include<stdio.h>
 | |
| 
 | |
| int main (int argc, char **argv)
 | |
| {
 | |
|     int w, h, bit_num = 0;
 | |
|     char byte_acc = 0;
 | |
|     int i, iter = 50;
 | |
|     double x, y, limit = 2.0;
 | |
|     double Zr, Zi, Cr, Ci, Tr, Ti;
 | |
| 
 | |
|     w = h = atoi(argv[1]);
 | |
| 
 | |
|     printf("P4\n%d %d\n",w,h);
 | |
| 
 | |
|     for(y=0;y<h;++y)
 | |
|     {
 | |
|         for(x=0;x<w;++x)
 | |
|         {
 | |
|             Zr = Zi = Tr = Ti = 0.0;
 | |
|             Cr = (2.0*x/w - 1.5); Ci=(2.0*y/h - 1.0);
 | |
| 
 | |
|             for (i=0;i<iter && (Tr+Ti <= limit*limit);++i)
 | |
|             {
 | |
|                 Zi = 2.0*Zr*Zi + Ci;
 | |
|                 Zr = Tr - Ti + Cr;
 | |
|                 Tr = Zr * Zr;
 | |
|                 Ti = Zi * Zi;
 | |
|             }
 | |
| 
 | |
|             byte_acc <<= 1;
 | |
|             if(Tr+Ti <= limit*limit) byte_acc |= 0x01;
 | |
| 
 | |
|             ++bit_num;
 | |
| 
 | |
|             if(bit_num == 8)
 | |
|             {
 | |
|                 putc(byte_acc,stdout);
 | |
|                 byte_acc = 0;
 | |
|                 bit_num = 0;
 | |
|             }
 | |
|             else if(x == w-1)
 | |
|             {
 | |
|                 byte_acc <<= (8-w%8);
 | |
|                 putc(byte_acc,stdout);
 | |
|                 byte_acc = 0;
 | |
|                 bit_num = 0;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | 
