Wie code ich "(-1) hoch i"



  • proggingmania schrieb:

    Oder die Lösung von Bashar, die mir IMHO besser gefällt.

    Die funktioniert aber leider nur genau für diesen einzelnen Spezialfall.

    So ist es gewissermassen "normal":

    #include <iostream>
    #include <cmath>
    
    int main(void){
    	std::cout<<"Exponent: ";
    	double exp;
    	std::cin>>exp;
    	std::cout<<pow(-1.0,exp); //(Kann auch Wurzeln berechnen)
    }
    

    Oder man will unbedingt etwas selber "basteln", dann halt irgendwie so:
    (Wobei diese Funktion keine Wurzeln berechnet wie pow() aus stdlib.)

    float pow(float bas, short exp){
    	float res=bas;
    	if(exp>0)
    		for(short cnt=1; cnt!=exp; cnt++)
    			res*=bas;
    	else if(exp<0)
    		if(bas!=0)
    			return 1/pow(bas,exp*-1);
    		else
    			throw std::exception("FEHLER: Division durch Null ist nicht definiert!");
    	else if(exp==1)
    		return bas;
    	else
    		return 1;
    }
    


  • Potenzen mit negativer Basis und nicht-ganzem Exponenten, soso. Da bewegst du dich mathematisch auf dünnem Eis, und auch der Standard sagt "The pow functions compute x raised to the power y. A domain error occurs if x is negative and y is finite and not an integer value.". Davon abgesehen ist das ein sehr wichtiger Spezialfall, denn meistens will man nicht wirklich Potenzen von -1 berechnen, sondern schreibt (-1)n, wenn man alternierende Reihen und dergleichen formuliert. 🙂

    BTW, dein Programm ist C++, kein C.



  • Nimm GMP.



  • Bashar schrieb:

    Potenzen mit negativer Basis und nicht-ganzem Exponenten, soso. Da bewegst du dich mathematisch auf dünnem Eis...

    mathematisch ist sowas durchaus erlaubt.
    🙂



  • mathe-freak schrieb:

    Bashar schrieb:

    Potenzen mit negativer Basis und nicht-ganzem Exponenten, soso. Da bewegst du dich mathematisch auf dünnem Eis...

    mathematisch ist sowas durchaus erlaubt.
    🙂

    aber nicht eindeutig.



  • echter Freak schrieb:

    mathe-freak schrieb:

    Bashar schrieb:

    Potenzen mit negativer Basis und nicht-ganzem Exponenten, soso. Da bewegst du dich mathematisch auf dünnem Eis...

    mathematisch ist sowas durchaus erlaubt.
    🙂

    aber nicht eindeutig.

    Hä???? was soll denn nicht eindeutg beim negativen und nicht-ganzen Exponenten sein? Das musst du erst mal erklären.



  • supertux schrieb:

    echter Freak schrieb:

    mathe-freak schrieb:

    Bashar schrieb:

    Potenzen mit negativer Basis und nicht-ganzem Exponenten, soso. Da bewegst du dich mathematisch auf dünnem Eis...

    mathematisch ist sowas durchaus erlaubt.
    🙂

    aber nicht eindeutig.

    Hä???? was soll denn nicht eindeutg beim negativen und nicht-ganzen Exponenten sein? Das musst du erst mal erklären.

    Ist (-1)^(1/2) jetzt +i oder -i? usw. Wenn der Exponent rational mit Nenner q > 0 in gekürzter Schreibweise ist, dann gibt es q Lösungen der Wurzelgleichung und keine kanonische Wahl. Wenn der Exponent nicht mehr rational ist, gibt es sogar unendlich viele Wurzeln.



  • res schrieb:

    Die funktioniert aber leider nur genau für diesen einzelnen Spezialfall.

    Dieser Spezialfall ist doch das Thema des Threads, bzw. das Anliegen von bimbambino.
    Und weil er ja gern eine Funktion implementieren möchte, kann ich ja mal nen Vorschlag posten:
    ( mit demo main 🙂 )

    int _1expI( int I )
    {
    	return I%2?-1:1;
    }
    int main()
    {
    	int i;
    	for ( i = -3; i<4; i++ )
    		printf("-1^%2d = %2d\n", i, _1expI(i));
        return 0;
    }
    


  • proggingmania schrieb:

    int _1expI( int I )
    {
    	return I%2?-1:1;
    }
    

    das mit den branches hatten wir doch schon. wie wärs mal zur abwechslung mit einem berechneten ergebnis?

    #define _1expI(I) (-((I)&1)|1)
    

    🙂



  • bitbastel-freak schrieb:

    #define _1expI(I) (-((I)&1)|1)
    🙂

    Ja, das Macro ist super 👍

    Aber branches ? Was sind branches, hatten wir die schon ? Hab ich was verpasst ? 😕





  • Habe die Anweisungen von Bashar
    genommen. Die schwebten mir auch im Kopf rum,
    dachte aber, dass man es noch irgendwie anderes machen kann.

    Egal.
    Vielen dank.



  • br schrieb:

    http://en.wikipedia.org/wiki/Branch_(computer_science) 🙄

    Ach das. Sag das doch gleich, das hatten wir doch schon 🙄

    :p



  • echter Freak schrieb:

    Ist (-1)^(1/2) jetzt +i oder -i? usw. Wenn der Exponent rational mit Nenner q > 0 in gekürzter Schreibweise ist, dann gibt es q Lösungen der Wurzelgleichung und keine kanonische Wahl. Wenn der Exponent nicht mehr rational ist, gibt es sogar unendlich viele Wurzeln.

    Klar, im |R gibt es keine Lösungen dafür, aber in |C und dort ist es wohldefiniert.



  • supertux schrieb:

    echter Freak schrieb:

    Ist (-1)^(1/2) jetzt +i oder -i? usw. Wenn der Exponent rational mit Nenner q > 0 in gekürzter Schreibweise ist, dann gibt es q Lösungen der Wurzelgleichung und keine kanonische Wahl. Wenn der Exponent nicht mehr rational ist, gibt es sogar unendlich viele Wurzeln.

    Klar, im |R gibt es keine Lösungen dafür, aber in |C und dort ist es wohldefiniert.

    Hast du meinen Beitrag verstanden? Welche der verschiedenen Wurzeln willst du nehmen?


Anmelden zum Antworten