Zehnerpotenzen in C: z.B 10^3 = 100

Gast #3007398
Hallo zusammen,
habe eben an einer Funktion in C gesucht, um Zehnerpotenzen zu erzeugen.
Also ein Variable hat den Wert 3, dann möchte ich 1000 erhalten, bei 4 
dann 10000  u.s.w.
Leider hat 10^Varriable  nicht funktioniert.
Nach dem nachlesen in einem C-Buch habe ich gesehen, das ^  bitweise 
exklusivoder ist.
Habe das Problem jetzt aufwendig in einer Schleife gelöst.

Frage:  Gibt es in C wirklich keine Potenzen ?

Gruß Dirk
#3007517
Wenn es nur um Integer geht ist pow() allerdings ziemlicher Overkill. 
Dann würde ich lieber selber eine Funktion schreiben:
1
uint32_t exp10(uint8_t e)
2
{
3
  uint32_t x = 1;
4
  for (uint8_t i = 0; i < e; i++) {
5
    x = x * 10;
6
  }
7
  return x;
8
}
#3007572
Hallo,

ich mache das manchmal so, dass ich ein Array im Flash anlegen.

Bedingung n E [0,..,9], f(n) = 10^n
1
#include <avr/pgmspace.h>
2

3
const uint32_t const a_my_exp10 [] PROGMEM =
4
{
5
1ul, // 10^0
6
10ul, // 10^1
7
100ul, // 10^2
8
1000ul, // 10^3
9
10000ul, // 10^4
10
100000ul, // 10^5
11
1000000ul, // 10^6
12
10000000ul, // 10^7
13
100000000ul, // 10^8
14
1000000000ul, // 10^9
15
};
16

17
uint32_t get_exp10(uint8_t n)
18
{
19
  if (n < 10)
20
    return (uint32_t)pgm_read_dword( & a_my_exp10[ n ] );
21
  else
22
    return 0;
23
}
#3007583
10e3 ist vom Typ float, also Vorsicht. 1000 ist nicht gleich 10e3. Auch 
pow ist für Fließkommazahlen. Wenn man tatsächlich Integer will, muss 
man sich also was anderes überlegen. Wenn's eh floats sein sollen, ist 
pow die richtige Wahl.

Grüße,
Sven
Gast #3008015
Hallo,
danke für die zahlreichen Antworten (hätte ich gar nicht mit gerechnet)
Der Hinweis mit dem Array ist super, mache ich dann so.
Thema beendet.
Gruß Dirk
Gast #3008058
Sven B. schrieb:
> 10e3 ist vom Typ float, also Vorsicht. 1000 ist nicht gleich 10e3.

10³ = 1000. 10e3 = 1e4 = 10 * 1000 = 1 * 10000. Ich dachte soviel Mathe 
kann man hier voraussetzen. Aber ich werde es dem nächst 
berücksichtigen.
Gast #3008122
Karl schrieb:
> Sven B. schrieb:
>> 10e3 ist vom Typ float, also Vorsicht. 1000 ist nicht gleich 10e3.
>
> 10³ = 1000. 10e3 = 1e4 = 10 * 1000 = 1 * 10000. Ich dachte soviel Mathe
> kann man hier voraussetzen. Aber ich werde es dem nächst
> berücksichtigen.

Selfowned^^
Persönliche Seite #3008151
Karl schrieb:
> Sven B. schrieb:
>> 10e3 ist vom Typ float, also Vorsicht. 1000 ist nicht gleich 10e3.
>
> 10³ = 1000. 10e3 = 1e4 = 10 * 1000 = 1 * 10000. Ich dachte soviel Mathe
> kann man hier voraussetzen. Aber ich werde es dem nächst
> berücksichtigen.

Er meinte das die beiden Zuweisungen
1
A = 1000;
2
B = 1E3;
nicht gleich sind. Und das sind sie auch nicht, da der Datentyp 
unterschiedlich ist.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.