Jump to content

Recommended Posts

Posted

Count on a myriad of users to find that this will break down the type system and slow down FP unbearably 😄  A  can of worms!

Seriously noone is obliged to use FP, so if you intent an exact computation, use an exact decimal format. If otherwise you can be satisfied by a (close) approximation, use FP as much as you can and deal with it's slight inacuracies.

  Reveal hidden contents

This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Posted

...a while back I found myself with the same question and got the same answer you gave, so I now know that use only integers but most of the ppl coding scripts have no clue of the "magic" in the hardware it all runs on. ðŸ˜…

And thank for your answers, as they are properly backed up. Quite educational.

Follow the link to my code contribution ( and other things too ).
FAQ - Please Read Before Posting.
autoit_scripter_blue_userbar.png

Posted
  On 3/4/2020 at 11:19 PM, TheXman said:

When comparing floating point values for equality, it is best to make sure that they are both rounded to the same decimal place.  $bTesting1 was not rounded.

Expand  

So not only the components of the mathematical equation should be rounded but also the result.

Solution is:

_Example()

Func _Example()
    Local $sKwota_Naliczona = _String_AsRounded_Number('6.05')
    Local $sKwota_Pobrana_Wczesniej = 0.00
    Local $sKwota_Pobieram = _String_AsRounded_Number('4.19')
    Local $sKwota_Do_Pobrania = _String_AsRounded_Number('1.86')
;~  Local $bTesting_1 = $sKwota_Naliczona - $sKwota_Pobrana_Wczesniej - $sKwota_Pobieram
    Local $bTesting_1 = _String_AsRounded_Number($sKwota_Naliczona - $sKwota_Pobrana_Wczesniej - $sKwota_Pobieram)
    Local $bTesting__A = ($bTesting_1 = $sKwota_Do_Pobrania)
    Local $bTesting__B = ($bTesting_1 == $sKwota_Do_Pobrania)
    ConsoleWrite( _
            'Test pobrania kosztu - ' & $bTesting__A & ' / ' & $bTesting__B & _
            ' ( testowano: ' & $sKwota_Naliczona & ' - ' & $sKwota_Pobrana_Wczesniej & ' - ' & $sKwota_Pobieram & ' = ' & $sKwota_Do_Pobrania & ' )' _
             & @CRLF)
EndFunc   ;==>_Example

Func _String_AsRounded_Number($sData)
    Return Round(Number(StringReplace($sData, ",", ".")), 2)
EndFunc   ;==>_String_AsRounded_Number

 

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Posted

Your _String_AsRounded_Number() function serves no real purpose. To wit:

Local $v = _String_AsRounded_Number('6.05')
ConsoleWrite(VarGetType($v) & @TAB & '0x' & Hex($v) & @LF)
ConsoleWrite(VarGetType(6.05) & @TAB & '0x' & Hex(6.05) & @LF)

Func _String_AsRounded_Number($sData)
    Return Round(Number(StringReplace($sData, ",", ".")), 2)
EndFunc   ;==>_String_AsRounded_Number

You see it returns exactly the same double as if you use the literal 6.05 value.

The equality operator = compares the variables as they are, that is double FP values in this case, which differ by one ULP as I previously showed.

OTOH the == operator first converts both doubles to string (and that's where the decimal rouding occurs). That's why the strings are equal because of the double to string conversion. Here's another example, where AutoIt (like almost all languages) is kind enough to round values to what you are likely to expect:

ConsoleWrite('0x' & Hex(6.0499999999999988) & @TAB & 6.0499999999999988 & @LF)
ConsoleWrite('0x' & Hex(6.05) & @TAB & 6.05 & @LF)
ConsoleWrite('0x' & Hex(6.0500000000000009) & @TAB & 6.0500000000000009 & @LF)

The 3 values are clearly different but their conversion to string all show "6.05".
You also can check that the 3 double values compare correctly even if their rounded string representation are exactly the same:

ConsoleWrite((6.0499999999999988 < 6.05) & @TAB & (6.05 < 6.0500000000000009) & @LF)

 

  Reveal hidden contents

This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Posted

Final example to show how increasing values of a double around the value 6.05 translate once converted to string by the default AutoIt conversion:

Local $t = DllStructCreate("double")
Local $u = DllStructCreate("int64", DllStructGetPtr($t))
DllStructSetData($t, 1, 6.05)

Local $x = DllStructGetData($u, 1)

For $i = -20 To 20
    DllStructSetData($u, 1, $x + $i)
    ConsoleWrite('0x' & Hex(DllStructGetData($t, 1)) & @TAB & DllStructGetData($t, 1) & @LF)
Next

 

  Reveal hidden contents

This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Posted
  On 3/5/2020 at 12:22 PM, jchd said:

that is double FP values in this case, which differ by one ULP as I previously showed.

OTOH the == operator

Expand  

what mean
FP
ULP
OTOH

please expand these shortcuts.

 

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Posted

FP = Floating point

ULP = Unit in the Last Place = least significant bit of a FP value in it's binary representation

OTOH = On The Other Hand

  Reveal hidden contents

This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...