nichtnumerischer Rundungsrest

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Rohwedder
Posts: 7628
Joined: 04 Jun 2014, 08:33
Location: Germany

nichtnumerischer Rundungsrest

19 Nov 2018, 04:50

Hallo,
ich habe einen Rechner mit Windows 7 und einen mit Windows 10, beide 64bit.
Wenn ich ihnen dieses Skript serviere:

Code: Select all

#Persistent
N := SubStr(1.E308+0,18)
If N is Number
	MsgBox, this is a Number: %N%
Else
	MsgBox, this is not a Number: %N%
Return
meldet nur der W7, not a Number da bei ihm N mit einem Ȉ = chr(520) endet.
Mich interessiert ob dieser Bug bei euch auch auftritt.
just me
Posts: 9453
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: nichtnumerischer Rundungsrest

19 Nov 2018, 05:24

Moin,

ich habe nur einen Win 10 x64 Rechner. Der behauptet, N sei eine Number.
---------------------------
B7989611.ahk
---------------------------
this is a Number: 10979063629440455417404923096773118463368106829031575854049114915371633289784946888990612496697211725156115902837431400
---------------------------
OK
---------------------------
Ich halte das allerdings für mehr als zweifelhaft, weil AHK mit solchen 'Nummern' nicht korrekt rechnen kann. Ein anschließendes

Code: Select all

MsgBox, % (N + 0)
ergibt
---------------------------
V8095283.ahk
---------------------------
9223372036854775807
---------------------------
OK
---------------------------
Benutzt Du auf beiden Rechnern identische AHK Versionen?
Rohwedder
Posts: 7628
Joined: 04 Jun 2014, 08:33
Location: Germany

Re: nichtnumerischer Rundungsrest

19 Nov 2018, 05:47

Hallo,
bei beiden läuft 1.1.30.01 64bit unicode.
beim W7:
10979063629440455417404923096773118463368106829031575854049114915371633289784946888990612496697211725156115902837431400883283070091981460460312Ȉ beim W7 wird offenbar weniger abgeschnitten!
Beim weiterrechnen auf dem W7 (meinem Hauprechner) kommt hier, wie erwartet, eine leere MsgBox.

beim W10
109790636294404554174049230967731184633681068290315758540491149153716332897849468889906124966972117251561159028374314004 also nur am Schluß eine 4 mehr als just me
und dann 9223372036854775807 genau wie just me
just me
Posts: 9453
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: nichtnumerischer Rundungsrest

19 Nov 2018, 06:16

Die 'verkürzte Zahl' ist der maximale Wert einer 64-Bit Integerzahl (siehe Kapazität und Speicher einer Variable). Mit größeren Zahlen kann AHK nicht rechnen. Es braucht dafür eines von den 'BigInt' Skripten.

Hat Deine Beobachtung einen für Dich praktisch relevanten Hintergrund?

(Ich weiß leider nicht, wie die lange Ziffernkolonne für 1.E308 + 0 überhaupt entsteht.)
Rohwedder
Posts: 7628
Joined: 04 Jun 2014, 08:33
Location: Germany

Re: nichtnumerischer Rundungsrest

19 Nov 2018, 07:53

Nein,
ich hatte nach etwas wie A_Max32Integer für 0xffffffff bzw. A_Max64Integer für 0x7fffffffffffffff gesucht und kam so auf das Thema. Positiv überraschte mich, daß Autohotkey mit 1.E308 überhaupt noch etwas anfangen konnte, umso negativer die Sache mit dem Ȉ.
just me
Posts: 9453
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: nichtnumerischer Rundungsrest

22 Nov 2018, 05:27

Rohwedder wrote:Positiv überraschte mich, daß Autohotkey mit 1.E308 überhaupt noch etwas anfangen konnte, ...
Das folgende Skript wirft bei mir eine Folge von 255 Ziffern aus:

Code: Select all

#NoEnv
Gui, Add, Edit, w800, % (1.E308 + 0)
Gui, Show, , Float Test
Return
GuiClose:
GuiEscape:
ExitApp

/*
100000000000000001097906362944045541740492309677311846336810682903157585404911491537163328978494688899061249669721172515611590283743140088328307009198146046031271664502933027185697489699588559043338384466165001178426897626212945177628091195786707458122783
*/
Dabei ist die garantierte Genauigkeit bereits innerhalb der ersten 15 Stellen 'verbraucht'. Der Rest ist eher nicht brauchbar. Außerdem fehlen ihm mehr als 50 Stellen. Ich würde deshalb sagen, dass AHK mit dem Wert 1.E308 nicht wirklich etwas anfangen kann.
Rohwedder
Posts: 7628
Joined: 04 Jun 2014, 08:33
Location: Germany

Re: nichtnumerischer Rundungsrest

22 Nov 2018, 07:28

Doch, es kann!
Z.B.:

Code: Select all

MsgBox,% 1.E308/8.1E291
ergibt bei mir:
12345679012345678.000000 das exakte Ergebnis lautet:
12345679012345679.012345679… (mit 012345679 Periode)
also erst die 17. Stelle ist eine 8 statt einer 9. Man ist aber nahe an Autohotkeys obersten Grenze.

Code: Select all

N = 1.7976E308 ;= ca. 2**1024
MsgBox,% N / N
MsgBox,% log(N)/log(2)
geht noch.

Code: Select all

N = 1.7977E308 ;= ca. 2**1024
MsgBox,% N / N
MsgBox,% log(N)/log(2)
eher nicht! Bei mir gibt es: -nan(ind) und inf
just me
Posts: 9453
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: nichtnumerischer Rundungsrest

22 Nov 2018, 11:13

OK, wenn man mit großen Zahlen rechnen will, die auf der rechten Seite aus vielen dezimalen Nullen bestehen - zumindest theoretisch, mag man das in diesem Rahmen tun wollen.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 58 guests