2013-04-23 20 views
5

bc, einem Linux-Kommandozeilen-Rechner, ist kompetent genugMit gebrochenen Exponenten mit bc

3^2 
9 

Auch negative Exponenten zu berechnen ist es nicht verwirren:

3^-2 
0.11111 

Doch wenn es versagt, wenn es erscheint

9^0.5 
Runtime warning (func=(main), adr=8): non-zero scale in exponent 

Wie könnte es sein, dass bc damit nicht umgehen kann?

Und was bedeutet die Fehlermeldung?


Ja, ich habe http://www.linuxquestions.org/questions/programming-9/bc-and-exponents-containing-decimals-and-fractions-755260/ und die Lösung lesen Sie dort

e(0.5*l(9)) 
2.99999999999999999998 

gegeben.

Und ja, es ist nicht gut, weil die Präzision verloren und

Ein Rechner sollten Ausdrücke lösen. Sie sind nicht zu das Leben leichter machen für den Rechner soll, wird angenommen, der andere Weg, um sein ...


Diese Funktion wurde entwickelt, um Benutzer zu ermutigen, ihre eigenen Funktionen zu schreiben. Es ist ein einzigartiger Taschenrechner, der eine benutzerdefinierte Funktion benötigt, um eine Quadratwurzel zu berechnen.

Es stört mich nicht wirklich eine Funktion für Tangenten oder Kotangenten zu schreiben, da es ziemlich einfach aussieht, s(x) und c(x). Aber meiner Meinung nach ist das Berechnen einer Quadratwurzel durch eine benutzerdefinierte Funktion etwas zu viel.

Warum jemand bc verwendet, wenn es Python gibt? Geschwindigkeit?

+0

Das zweite Argument von expr^expr muss eine ganze Zahl sein (Skala = 0). Aber 0.5 hat scale = 1. – hendrik

+0

Hinweis 'bc' hat bereits eine native Quadratwurzelfunktion:' scale = 5; sqrt (9) ' – khaverim

Antwort

2

bc ist sehr einfach und komplexere Funktionen, die nicht von der "Math Extension" zur Verfügung gestellt werden, müssen in der Sprache selbst implementiert werden: es hat alles, was Sie dafür brauchen; insbesondere "Power" ist ein gängiges Beispiel auch unter wikipedia.

Aber Sie können auch interessiert sein, zum Beispiel this answer hier auf SO zu lesen.

+0

Ich würde dem zustimmen, hätte nicht 'Power'-Funktion bereits drin. Er kann "3^2" und sogar "3^-2" fehlerfrei berechnen. Es antwortet jedoch mit nicht entzifferbarer Fehlermeldung, wenn eine einfache Funktion wie eine Quadratwurzel angefordert wird. –

+0

es hat keine Power-Funktion: Es hat die ganzzahlige Power-Funktion. Der Fehler, wenn ich nach '9^0.11' in der BC frage, die ich jetzt benutzen kann, ist" exp keine ganze Zahl ", was es klarer macht. Aber "Skala ungleich Null" bedeutet genau dasselbe, da Sie 'scale = 0' verwenden, um zu sagen, dass Sie" ganzzahlige Genauigkeit "(keine Dezimalzahlen) wollen. – ShinTakezou

+0

"Es hat keine Power-Funktion: Es hat die ganzzahlige Power-Funktion" macht keinen Sinn. Jede einzelne andere Funktion in bc akzeptiert gebrochene Argumente. Warum eine Ausnahme für solch eine weit verbreitete Funktion machen? –

0

In bc muss b eine Ganzzahl in a^b sein. Allerdings können Sie Ihre eigenen Funktionen bc wie folgt hinzu:

eine Datei ~/.bcrc erstellen, fügen Sie die folgende Funktion hinzu:

define pow(a, b) { 
    if (scale(b) == 0) { 
     return a^b; 
    } 
    return e(b*l(a)); 
} 

dann können Sie bc beginnen wie folgt:

bc -l <(cat ~/.bcrc) 

so können Sie mit der Funktion pow diese Berechnung durchführen.

Sehen Sie mehr here, Sie können einige weitere Funktionen zu BC hinzufügen.