• R/O
  • HTTP
  • SSH
  • HTTPS

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

This is for exploring and demonstrating ways to extend the available integer math in C. Cコンパイラが提供する整数を拡張するための探険用のソースコードです。


File Info

Révision 056c8c9d381867aa3d96bcf05e9a165e42771547
Taille 1,118 octets
l'heure 2013-07-29 11:34:41
Auteur Joel Matthew Rees
Message de Log

Where I ran out of time last week. Demonstrats add/sub/mul/bitdiv.
C's lack of an overflow target for math (especially division) makes it hard to expand.
But division is hard anyway, and the carry/overflow for the rest really is not that bad.

Content

/* Multiplication tester for an eight-bit framework 
// for testing various arithmetic techniques.
// Written by Joel Matthew Rees
// Copyright 2013, Joel Matthew Rees
// Distribution and use permitted under terms of the GPL v. 3,
// See the included file, LICENSE.TXT,
// or on-line at <http://www.gnu.org/licenses/>. 
*/


#include <stdio.h>

#include "nibBit.h"


int main( int argc, char * argv[] )
{  unsigned i, j;
   long bad = 0;
   long limit = 0xff;

   if ( argc > 1 )
   {  char * scan;
      limit = strtoul( argv[ 1 ], &scan, 0 );
   }

   initMyStack();

   mySP -= 2;
   for ( i = 0; i <= limit; ++i )
   {  for ( j = 0; j <= limit; ++j )
      {  unsigned product = i * j;
         unsigned synthetic;
         mySP[ 1 ] = i; 
         mySP[ 0 ] = j; 
         nibUMul();
         synthetic = ( mySP[ 0 ] << BYTEBITS ) | mySP[ 1 ];
         if ( product != synthetic )
         {  bad += 1;
            printf( "bad %ld(%d %d): i * j = 0x%04x, synth(i,j) = 0x%04x\n",
                    bad, i, j, product, synthetic );
         }
      }
   }
   printf( "bad count: %ld\n", bad );

   return bad;
}