Hallo,
ich habe folgendes Problem: Ich würde gerne eine Reihe von elektrischen Widerständen aus der E24-Reihe ausrechnen. Die Formel dazu ist:
10^(i/24)
wobei i für den i-ten Widerstand steht.
Leider kann die Funktion pow() keine reellen Exponenten. Ich habe also versucht, das Problem zu umgehen und folgende Funktion geschrieben:
return exp( log(i/24) * log(10.0) );
Dabei ist mir aufgefallen, daß die Funktion exp ganz komische Werte ausrechnet. Jedenfalls rechnet es an meinem einen Computer nur mit int-Werten richtig, nicht aber mit double. Auf einem anderen Computer rechnet es niemals richtig. Ich frage mich, was ich falsch mache.
Im folgenden findet Ihr den gesamten Quelltext. Das Programm wird kompiliert mit „gcc -lm Widerstandsberechnung.c“. Der Fehler ist mit der ersten Funktion namens double Widerstand(int i) verknüpft.
Wäre echt toll, wenn mir jemand einen Hinweis geben könnte.
Viele Grüße!
Bernhard
Hier das Programm:
/** Dieses Programm rechnet zwei Widerstandswerte aus, die in Serie verschaltet
dem gesuchten Widerstandswert am ehesten entsprechen. */
#include
#include
#define E_REIHE 24
// Folgende Funktion berechnet den i-ten Widerstand der E-Reihe.
double
Widerstand(int i)
{
double power;
power = i/E_REIHE;
return exp( log(power) * log(10.0) ); // Berechnet 10^(i/E_Reihe), z.B. 10^(i/24)
}
int
main()
{
// Variablendeklaration
unsigned int i, j;
long int GesuchterWert, Gesamtwiderstand, BesterWert = 600000, ErsterWiderstand, ZweiterWiderstand;
// Abfrage, welcher Wert gesucht ist:
printf („Welcher Widerstandswert ist gesucht? „);
scanf (“%d“, &GesuchterWert);
// Berechnung der beiden besten WiderstŠnde
for (i=0; i