Avatar billede tizian Nybegynder
25. december 2005 - 21:13 Der er 10 kommentarer og
1 løsning

Udregn en potens af et tal

Jeg er i gang med at lave et lille sjovt program der kan lave en hvilken som helst besked om til en talsum...

Problemet jeg er stødt på er, at der tilsyneladende ikke findes en eksponentiel operator, tilsvarende til ^ i php eller på lommeregneren. Istedet bruges ^ til en underlig bit-wise sammenlignings operator.
Er der et andet tegn, eller en smart metode (udover en urimelig for loop el. lign.) der kan udregne f.eks. 2^3 ( =8 hvis i er i tvivl).

På forhånd tak.
Philip
Avatar billede plx Nybegynder
25. december 2005 - 21:17 #1
math.h har pow(x, y)
Avatar billede tizian Nybegynder
25. december 2005 - 21:29 #2
Nu er jeg ikke helt inde i c++ endnu (netop derfor jeg laver programmet :)), men når du siger math.h mener du et "library" ikke sandt? og så skal man include:

#include <math.h>

i starten eller sådan noget ikke?
Avatar billede datasource Nybegynder
25. december 2005 - 21:45 #3
Ja det er #include <math.h> i starten.
så er fx 10^5 = pow(10,5);
Avatar billede datasource Nybegynder
25. december 2005 - 21:47 #4
math.h - C
cmath - C++

bare en lille ugyldig ting ;)
Avatar billede datasource Nybegynder
25. december 2005 - 21:50 #5
//Her vil vi finde 8 i tredje
#include <cmath>
#include <iostream>

using namespace std;

int main()
{
    cout<<"4 to the 5th power is: "<<pow(8.0, 3.0);  // .0 fordi funktionen pow er to doubler i c++
}
Avatar billede tizian Nybegynder
25. december 2005 - 22:06 #6
En anden ting, hvis jeg nu har nogle store tal (248^5 f.eks.) så vil de ikke vises rigtigt som int's, og med float bliver de vist med eksponentiel notation, er der nogen måde at undgå det på?
Avatar billede nlf Nybegynder
25. december 2005 - 22:23 #7
Brug 64-bit heltal ;)

De er defineret som __int64 (i stedet for int) på GCC og MSVC (og du bruger formentlig en af disse).
Avatar billede tizian Nybegynder
25. december 2005 - 22:32 #8
Det tror jeg så på :D

Men den kommer med en fejl når jeg beder den om f.eks.:

    int basen =  256;
    __int64 i = 0;
    int dummy = 104;

    i = dummy * pow(basen,6);

Den siger:

main.cpp call of overloaded `pow(int&, int&)' is ambiguous

og så noget med nogle kandidater osv...

Nogen forslag?
Avatar billede bertelbrander Praktikant
25. december 2005 - 23:49 #9
At regne med __int64 løser ikke rigtigt noget problem.

Det er bedre at regne med double, og så bruge setw og setprecision til at formatere output:

  std::cout << std::setw(12) << std::setprecision(12) << SomeDouble << std::endl;
Avatar billede bertelbrander Praktikant
25. december 2005 - 23:56 #10
I øvrigt er math.h også en fuldt gyldig headerfil for C++, den indeholder det samme som cmath, bortset fra at cmath har nogle ekstra overload funktioner. Og så ligger funktionerne i std:: namespace.
Avatar billede bertelbrander Praktikant
26. december 2005 - 00:19 #11
Det kan også være en god idé at kikke på:
http://www.cplusplus.com/ref/iostream/ios_base/fmtflags.html
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB

Udviklings- og Forenklingsstyrelsen

Scrum Master

HusCompagniet A/S

Application Manager

Udviklings- og Forenklingsstyrelsen

Backend-udvikler til ny platform i Azure

Udviklings- og Forenklingsstyrelsen

Service Delivery Managers til bolig- og ejendomsdata