Kertoman laskeminen

Matti.W

Taskulaskimet tulostavat kertoman (kts. wikipedia) usein pelkästään lukuun 69 asti, koska tuloksessa ei voi olla enempää kuin 99 nollaa. Äärevät luvut ovat siis laskimille pulma, mutta ongelman voi kiertää kun avuksi ottaa ohjelman jossa luku on purettu alkutekijöihinsä eli mantissaan ja exponenttiin. Mantissa tarkoittaa luvun ensimmäisiä desimaaleja, exponentti sitä kuinka monta kertaa se pitää kertoa kymmenellä.

Em. idea c-kielellä toteutettuna näyttää tältä:

//kertoma.c: kertoma suuresta luvusta iteraatiomenetelmällä toteutettuna.
#include
double purku(double ,long int * e);//paluuarvot: mantissa(float) ja exponentti(int*)
struct liuku { //desimaalilukuja alkutekijöissään
double m; //koko 8 tavua
unsigned long int e; //koko 4 tavua
}x,y;

int main(int argc, char *argv[]) //luetaan luku komentoriviltä
{
int b=atoi(argv[1]); //muutetaan luku merkkijonosta kokonaisluvuksi
if (argc!=2){return 1;} //virhetilanteen hallinta
double a=1;
x.m=1;x.e=0; //kertoman siemenluku
for(a=1;a=10){
x.m=x.m/10;
x.e ;
}
}
a--;
printf("Luvun %g kertoma on %8.7g E%u\n",a,x.m,x.e);
return 0;
}

double purku(double a, long int * pe) //puretaan desimaaliluku alkutekijöihinsä
{
long int e=0;
if(a>1){
while(a>1){a=a/10;e ;}
}
if(a

3

2368

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Edellä mainittu ohjelma laskee kertoman vain likimäärin mutta tämä laskee sen absoluuttisen tarkasti. Ohjelma perustuu binäärikoodattuun desimaalilukuun (bdc) jolla kierretään muutujan kokorajoitukset. Se miten suuresta luvusta voi kertoman ottaa riippuu taulukkomuuttujan ak[] koosta kun koko on 1000 alkiota voidaan ottaa kertoma luvusta 470.

      //kertoma3.c: Absoluuttisen tarkka kertoman laskenta äärevästä luvusta.
      #include
      char ak[1000]={0}; //bdc_luku (kokonaisluku)

      void kertoma(int n);
      void kerto(int n); //bdc_kertolasku
      void tulostus(void); //

      int main()
      {
      int n=470;
      kertoma(n);
      printf("%i! = ",n);tulostus();printf("\n");
      return 0;
      }

      void kertoma(int n)
      {
      int i=1;
      ak[999]=1; //kertoman siemenluku
      for(i=1;i=0;i--){
      yli=(ak[i]*n yli)/10;
      ak[i]=(ak[i]*n m)%10;
      m=yli;
      }
      }

      void tulostus()
      {
      int i=0,j=0, rp=0;
      for(i=0;i

      • koodiApina

        code.c: In function 'main':

        code.c:11: error: parameter 'n' is initialized

        code.c:12: error: expected declaration specifiers before 'kertoma'

        code.c:13: error: expected declaration specifiers before 'printf'

        code.c:13: error: expected declaration specifiers before 'tulostus'

        code.c:13: error: expected declaration specifiers before 'printf'

        code.c:14: error: expected declaration specifiers before 'return'

        code.c:18: error: parameter 'i' is initialized

        code.c:19: error: expected declaration specifiers before 'ak'

        code.c:20: error: expected declaration specifiers before 'for'

        code.c:20: error: expected declaration specifiers before 'i'

        code.c:20: error: expected declaration specifiers before 'i'

        code.c:18: error: declaration for parameter 'i' but no such parameter

        code.c:16: error: declaration for parameter 'kertoma' but no such parameter

        code.c:11: error: declaration for parameter 'n' but no such parameter


    • GMP-fani

    Ketjusta on poistettu 1 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Säästäminen on typerää, muistakaa äänestää demareita

      Säästäminen on typerää, koska aiheuttaa vain talouden taantumista ja lopulta tappaa potilaan. Demareiden tapa on satsat
      Maailman menoa
      111
      7943
    2. Olli Rehn: Eläkkeistä pitää leikata. Nyt tuli Lindtmanille kauhun paikka

      jos johtaa seuraavaa hallitusta. Purra: eläkkeisiin ei kosketa. Eikä tällä hallituskaudella varmasti kosketa, mutta seur
      Maailman menoa
      422
      7083
    3. SDP:n budjetin peruskivi: "Rahaa nimittäin on!"

      Demarien talouspolitiikan ydin on usein tiivistetty klassiseen meemiin: rahaa on, kunhan se on jonkun muun rahaa. Vuoden
      Maailman menoa
      178
      5350
    4. Poliisien suosikkipuolueet ylivoimaisesti: Kokoomus ja persut

      samoin on armeijan henkilöstön kanssa. Sen sijaan sekä vihreät, vasliitto ja SDP ovat hyljeksittyjä puolueita poliisien
      Maailman menoa
      128
      4291
    5. Kun täällä kysytään aina vaan naisilta

      Niin nyt kysytään miehiltä. Mies, voisitko ottaa kumppaniksesi naisen joka nostaa enemmän penkistä kuin sinä? Tienaa en
      Sinkut
      75
      4184
    6. Sdp, Vihreät ja vasemmistoliitto muuttumassa naisten puolueiksi?

      Sdp 64 % naisia, vihreät 70 % naisia ja vasemmistoliitto 60 % naisia. Ilmankos ne puolueet ajaa autoilevien kantasuomal
      Maailman menoa
      95
      4166
    7. Hatunnosto! Mari Hynynen (os. Perankoski) ja Jouni Hynynen auttavat vähäosaisia upealla tavalla!

      Hatunnosto! Mari ja Jouni Hynynen ovat Vailla vakinaista asuntoa ry:n uudet kummit. Hynysiä motivoi halu lisätä ymmärr
      Maailman menoa
      10
      3902
    8. Tiesitkö? Tämä suomalainen keksi Elämäni biisi -sarjan - Viinin lipittely mainittu!

      Tiesitkö? Elämäni biisi on suomalainen formaatti ja sen takana on Petja Peltomaa. Hänen kynästä ovat lähtöisin myös mm.
      Tv-sarjat
      0
      3580
    9. Epäonnistunut "Tuppurais-operaatio" kaatoi Purran hallituksen

      Persut yrittivät viimemetreillä häivyttää omaa täydellistä epäonnistumistaan syyttämällä opposition edustajaa nimettömil
      Maailman menoa
      13
      2450
    10. Ostaisitko sinä rempattavan asunnon Italiasta tai jostain muualta ulkomailta, mistä?

      Ella Kanninen on tehnyt Italiassa asuntokaupat. Hän kertoo Instagramissa kierrelleensä viime kesänä Toscanassa katselema
      Asunnot ja asuminen
      17
      2036
    Aihe