zehbaeh: parseInt / Number.toString - Systemabhängig?

Hallo,

Ich bastel grad an einer Funktion zur Umwandlung von Werten in Strings mit Zahlenbasis jeseits von 10,16.
Dabei ist mir aufgefallen das:

  
radix36 = parseInt(Number.MAX_VALUE.toString(36), 36) == Number.MAX_VALUE;  
radix32 = parseInt(Number.MAX_VALUE.toString(32), 32) == Number.MAX_VALUE;  

mit FF/Chrome auf einem WinNT 32Bit-System
radix36 => false (nicht wie erwartet true)
radix32 => true (wie erwartet)
ergibt. Ist das Dokumentiert? Ich habe dazu bisher nichts erhellendes gefunden.

  1. Hi,

    Dabei ist mir aufgefallen das:

    radix36 = parseInt(Number.MAX_VALUE.toString(36), 36) == Number.MAX_VALUE;
    radix32 = parseInt(Number.MAX_VALUE.toString(32), 32) == Number.MAX_VALUE;

    
    > mit FF/Chrome auf einem WinNT 32Bit-System  
    > radix36 => false (nicht wie erwartet true)  
    > radix32 => true (wie erwartet)  
    > ergibt.  
      
    Hast du dir die einzelnen Werte mal anzeigen lassen?  
      
    Dass Float-Zahlen prinzipbedingt nur eine begrenzte Genauigkeit haben, hast du berücksichtigt?  
      
    MfG ChrisB  
      
    
    -- 
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    
    1. Hast du dir die einzelnen Werte mal anzeigen lassen?

      Ja, das bringt mich aber nicht wirklich weiter.

      Dass Float-Zahlen prinzipbedingt nur eine begrenzte Genauigkeit haben, hast du berücksichtigt?

      Muss ich das in diesem Anwendungsfall?
      Die Zahlen liegen ja im gültigen Wertebereich.

      Ein wenig erhellender ist aber das:
      parseInt(Number.MAX_VALUE.toString(radix), radix) == Number.MAX_VALUE
      nur bei einem Wert für Radix von 2,4,8,16,32 true liefert.

      PS: Da ich das für einen Bug, bzw. zumindest in der Dokumentation für erwähnenswert halte, habe ich einen entsprechenden Eintrag bei Bugzilla  abgesetzt (673765).

      1. Hi,

        Hast du dir die einzelnen Werte mal anzeigen lassen?

        Ja, das bringt mich aber nicht wirklich weiter.

        Was kam denn dabei heraus?

        Ein wenig erhellender ist aber das:
        parseInt(Number.MAX_VALUE.toString(radix), radix) == Number.MAX_VALUE
        nur bei einem Wert für Radix von 2,4,8,16,32 true liefert.

        PS: Da ich das für einen Bug, bzw. zumindest in der Dokumentation für erwähnenswert halte, habe ich einen entsprechenden Eintrag bei Bugzilla  abgesetzt (673765).

        Ach ... bitte verschmutze den Bugtracker doch nicht mit Einträgen, die keine echten Fehler darstellen, sondern aus deinem Unverständnis für den Rechner-internen Umgang mit Floatzahlen herrühren.

        Dass es immer wie von dir gewünscht funktioniert, wenn der Radix eine Zweierpotenz ist, lässt dich nicht stutzig werden?
        So in der Hinsicht, dass Computer bekanntlich auf Basis des Binärsystems rechnen, innerhalb von diesem „gut“ sind, aber bei Abweichung davon zwangsläufig Ungenauigkeiten produzieren?

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Ach ... Number.MAX_VALUE ist deiner Meinung nach nicht binär exakt abbildbar?

          1. Hi,

            Ach ... Number.MAX_VALUE ist deiner Meinung nach nicht binär exakt abbildbar?

            Nein, das habe ich nirgends behauptet.

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. Nein, das habe ich nirgends behauptet.

              Und was genau wolltest Du mir dann mit deinem Statement mitteilen?