Nachkommastelle der REAL-Werte

Anonymous
2006-04-19
2006-04-21
  • Anonymous - 2006-04-19

    Originally created by: S-12

    Hallo,

    ich habe folgendes Problem.

    Voraus schicken möchte ich, dass ich an einer Moeller XC-SPS mit der XSoft 2.3.5 sitze.

    Aus einem Array addiere ich Datenzusammen. Dabei rechne ich bis zur vierten Nachkommastelle.

    Zur besseren Vorstellung mein Code: ```

    NReal := ((dataBufferh[start] -48)1000) + ((dataBufferh[start+1] -48)100) + ((dataBufferh[start+2] -48)10) + ((dataBufferh[start+3] -48) + ((dataBufferh[start+5] -48)0.1) + ((dataBufferh[start+6] -48)0.01) + ((dataBufferh[start+7] -48)0.01) + ((dataBufferh[start+8] -48)*0.0001);

    ```

    Wenn ich nun online mir die Werte im Unterprogramm ansehe fällt auf, dass der Wert nur drei Nachkommastellen besitzt und die dritte Stelle eine Rundung ist, welche abhängig von meiner berechneten vierten Stelle ist.

    So, nun meine Frage. Sind nur drei Nachkommastellen möglich oder gibt es einen Kniff um Anzahl der Nachkommastellen zu erhöhen?

    Ich wollte eigentlich vermeiden das Komma nach links zu schieben. Auch wäre es allgem. für die Genauigkeit von Berechnungen interessant zu wissen.

    MfG

    M

     
  • Juebo - 2006-04-19

    könnte das daran liegen, daß Sie 2* mit "0,01" multiplizieren?

     
  • Anonymous - 2006-04-20

    Originally created by: S-12

    Hallo,

    den Fehler hab eich berichtig, beim zweiten sollte es *0,001 heißen. An den dargestellten Nachkommastellen ändert das nichts.

    MfG M

     
  • J Schohaus - 2006-04-21

    Der Fehler liegt in der Genauigkeit von REAL Typen. ( 16Bit )

    z.B. Die Zahl 1234.6789 kann in REAL nur als 1234.679 Dargestellt werden.

    Um die geforderte Genauigkeit zu erreichen solltest du ein Variable vom Type LREAL als Zielvariable nehmen. ( 32Bit )

    ! wenn dieses vom Zielsystem unterstützt wird !

     
  • Anonymous - 2006-04-21

    Originally created by: -AB-

    J Schohaus hat geschrieben:
    Der Fehler liegt in der Genauigkeit von REAL Typen. ( 16Bit )
    z.B. Die Zahl 1234.6789 kann in REAL nur als 1234.679 Dargestellt werden.
    Um die geforderte Genauigkeit zu erreichen solltest du ein Variable vom Type LREAL als Zielvariable nehmen. ( 32Bit )
    ! wenn dieses vom Zielsystem unterstützt wird !

    Aus der CoDeSys Hilfe:

    ...

    Der reservierte Speicherplatz beträgt 32 Bit bei REAL und 64 Bit bei LREAL.

     

Log in to post a comment.