Why doesn't
1.0 = 2.0work? Isn't real an equality type?It gives the error:
Error: operator and operand don't agree [equality type required] operator domain: ''Z * ''Z operand: real * real in expression: 1.0 = 2.0Why won't reals in patterns work like so?
fun fact 0.0 = 1.0 | fact x = x * fact (x - 1.0)It gives the error:
Error: syntax error: inserting EQUALOP
Why can't I compare reals in Standard ML?
3.6k views Asked by sshine At
1
There are 1 answers
Related Questions in FLOATING-POINT
- Imprecision in float integers in C
- printf floating-point output variations only with alpine docker on Windows
- Is it possible to represent -3/32 as a binary floating-point value using only 7 bits
- Pytorch sum problem (possibly floating point)
- Example of Code with and without strictfp Modifier
- Why does numpy's `2**np.array([64])` produces 0, whereas plain python's 2**64 gives the correct result?
- How does floating-point addition work in "np.finfo(np.float64).max + 1"?
- Problem caused by FP16 group quantization on vit-tiny
- How to format float to omit zeros at the end of the fraction
- TypeError: Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe' again
- Why wont variables in the list print to 3 decimal places?
- How to print all the decimals of a float 128 to the console
- How to specify a float/decimal value for a column inside an insert in liquibase changelog?
- Why does gcc -O1 affects std::rint()?
- Sign of result of addition in floating point arithmetic
Related Questions in SML
- Creating an instance of a Binary Tree (Programming Standard ML by Robert Harper)
- Obtain a function as tree in SML
- TextIO.openIn:"No such file or directory" in Poly/ML
- How to implement Label/TextVIew with giraffe library in SML
- Compiling Giraffe library Hello World on Ubuntu
- How to match function type in signature in SML
- Error "no *.cm, *.mlb, or millet.toml files found in this directory" in VS code using SML
- I'm new to SML/NJ and there's some questions bothering me. I don't know how to use Math or String in the basis lib
- SML Looping through 2 Random variables and ordering them?
- How do I fix my standard ml code when I have an unbound value 'a'?
- How to install and run SML/ NJ in VScode
- UTF-8, Unicode in SML/NJ
- What is the difference between ('a,'b) and ('a*'b)?
- sml standard pop function vs user defiend. And return values
- Error: unbound type constructor: TypeInteger
Related Questions in SMLNJ
- Use external SML file in SML/NJ build configuration
- I'm trying to install SMLNJ using iTerm and ZSH but I keep getting "sml: cannot find runtime system /usr/local/smlnj/bin/.run/run.-"
- Error "no *.cm, *.mlb, or millet.toml files found in this directory" in VS code using SML
- UTF-8, Unicode in SML/NJ
- Error: unbound type constructor: TypeInteger
- Recursive function that deals with "ref" in SML
- How to add all elements in a list in SML
- SML: What is the difference of input and inputAll
- SML: Error: types of rules don't agree when I open the Real signature
- Why is the result of the following functor not opaque?
- Multiplying real number extracted of a pair using case of in StandarML
- How to check if x value exists in a list
- Error while using HashTable structure in files used in a CM file
- How to cast value in SML? Trying to take return type of S-Expression parser and convert to data structure
- In SML - Why doesn't simple recursion always return 0 if first expression met?
Related Questions in FLOATING-POINT-COMPARISON
- Is it valid to compare double directly using ==?
- Redis: using ZRANGE to search for a single value?
- What causes the different NaN behavior when compiling `_mm_ucomilt_ss` intrinsic?
- Issue in floating point comparison leads to incorrect query result in DolphinDB GUI
- How to tell rust to do all float comparisons using a given lib by default?
- mips comparison
- Floating-point arithemtic in C: epsilon comparison
- Floating point operations results are different in Android, TensorFlow and Pytorch
- I have a PriorityQueue of Objects and I need to sort it based on float values.How do I create a comparator for it?
- Minitest assert_equal failing when should be equal
- How to handle floating point comparisons in C++ mathematical expressions therefore rounding errors can be handled?
- Can we use !islessgreater(float a, float b) to check a==b given both a and b are not nan
- Java List.contains object with double with tolerance
- What is the canonical way to check for approximate zeros in Catch2?
- How to evaluate whether two number are close enough or not in Python?
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
No. The type variable
''Zindicates that the operands of=must have equality types.Pattern matching relies implicitly on testing for equality. The cryptic error message
syntax error: inserting EQUALOPindicates that the SML/NJ parser does not allow for floating-point literals where a pattern is expected, and so the programmer is prevented from receiving a more meaningful type error.To elaborate,
From http://www.smlnj.org/doc/FAQ/faq.txt:
From http://mlton.org/PolymorphicEquality:
For example,
Real.== (0.1 + 0.2, 0.3)isfalse.From http://sml-family.org/Basis/real.html:
The short version: Don't compare reals using equality. Perform an epsilon test. I would recommend reading the article on http://floating-point-gui.de/errors/comparison. In summary:
Don't check if reals are the same, but if the difference is very small.
The error margin that the difference (delta) is compared to is often called epsilon.
Don't compare the difference against a fixed epsilon:
Don't just compare the relative difference against epsilon:
Look out for edge cases:
When
b = 0.0it raisesDiv. (Switchingaandbprovides a symmetric edge case.)When
aandbare on opposite sides of zero it returnsfalseeven when they’re the smallest possible non-zero numbers.The result is not commutative. There are cases where
nearlyEqual (a, b, eps)does not give the same result asnearlyEqual (b, a, eps).The guide provides a generic solution; translated to Standard ML this looks like:
And it continues to warn of some edge cases: