Logarithmusschreibweise für extrem große Zahlen

  • Moin,

    Anbei ist eine UDF die intern mit folgender Schreibweise Arbeitet: 1e10.994604967679 statt 9.8765432e10. Die "Zahl" wird als als Logarithmus zur Basis 10 gespeichert. Die eigentliche Zahl ergibt sich damit zu Sign * 10 ^ Double. Mit dieser Schreibweise lassen sich relativ große (1e99999 z.B.) und auch sehr kleine Zahlen gut darstellen. Für exakte Ergebnisse ist diese Methode natürlich ungeeignet, da ist es besser mit BigInt oder BigNum zu rechnen, aber wenn die Genauigkeit "nur so pi mal 7 Nachkommastellen" stimmen muss, dann findet man hier vielleicht was man sucht.

    Ich habe die UDF vorerst "ENumber" getauft (wollte eigentlich BigNum, aber das gibt es ja schon ^^), oder LogNum (aber das klang irgendwie doof). Also ist es jetzt ENum (E = exponential), damit ist der Name wenigstens "fast" richtig.

    In der UDF sind einige Rechenmethoden (+ - * / ^ etc) enthalten. Fortschreitendes wie Fakultät, Binomialkoeffizient, uvm. habe ich aber noch nicht angefasst, da mir das auch zu viel Arbeit ist "alle" Anwendungsfälle ausgiebig zu testen. Ich habe versucht möglichst alle exeptions (und sowas wie "positive 0 und negative 0") 1 zu 1 nachzubilden um den in AutoIt üblichen Rechenregeln zu entsprechen. Ein paar Funktionen arbeiten dennoch anders, z.B. rational power(x, y) = x^y. AutoIt schummelt hier und nimmt y einfach als Integer, wenn es "nah genug" an einem Integer liegt, damit kann man auch negative Zahlen potenzieren, was diese UDF aber nicht kann.

    Wenn jemand Funktionen beisteuern, testen, die UDF nutzen, (z.B. um ein Incremental-Idle-Game zu basteln wo es wahnsinnig riesige Zahlen gibt), Änderungen vornehmen, etc. will. Immer her damit, ich bin für jede Kritik und jeden Verbesserungsvorschlag offen.

    lg

    M

  • Ich habe die UDF vorerst "ENumber" getauft (wollte eigentlich BigNum, aber das gibt es ja schon ^^ ), oder LogNum (aber das klang irgendwie doof).

    Namensideen:

    BigNumEx

    BigNumExp

    BigNumLog

    BigNumEL

    BigNumELog

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

  • Wenn die Namensgebung nur so einfach wäre wie bei wissenschaftlichen Abschlussarbeiten: "Exponentiallogarithmische Schreibweise zur Erfassung von Zahlen außerhalb des Double Wertebereichs". Mit dem Namen liest zwar keiner deine Bachelorarbeit, aber der Prof ist glücklich :D

  • Ja ja, die Profs! ;)

    Namensgebung beim Programmieren ist unglaublich komplex. Man muss so viele Dinge unter einen Hut bekommen, dass da oft sehr viel Zeit für drauf geht. - Ach, waren das noch Zeiten, wo ein Script nur $Label1 und $Label2 umfasste! 8)

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.