在 F# 中,如何高效地比较几乎相等的浮点数?它应该适用于非常大和非常小的值。我考虑先比较指数,然后比较尾数(有效数字),同时忽略其 52 位中的最后 4 位。这是一个好方法吗?我如何获取浮点数的指数和尾数(有效数字)?
在 F# 中,如何高效地比较几乎相等的浮点数?它应该适用于非常大和非常小的值。我考虑先比较指数,然后比较尾数(有效数字),同时忽略其 52 位中的最后 4 位。这是一个好方法吗?我如何获取浮点数的指数和尾数(有效数字)?
float
只是一个System.Double
的简写。因此,您可以使用BitConverter.DoubleToInt64Bits方法高效(而且安全!)地将F# float
值“转换”为int64
;这很有用,因为它避免了分配byte[]
,就像John在他的评论中提到的那样。您可以使用一些简单的位运算从该int64
中获取指数和有效数字。
abs(a-b)<threshold
жҲ–abs(a-b)<threshold*a
иҝҷж ·зҡ„д»Јз Ғжңүд»Җд№Ҳй—®йўҳе‘ўпјҹеңЁ F# дёӯиҺ·еҸ–жө®зӮ№ж•°зҡ„дҪҚеҸҜиғҪдјҡжҜ”жү§иЎҢиҝҷдёӨдёӘж“ҚдҪңзҡ„ејҖй”ҖжӣҙеӨ§пјҢеӣ дёәе®ғйңҖиҰҒеҲҶй…ҚдёҖдёӘеӯ—иҠӮж•°з»„гҖӮ - John Palmerabs(a-b)<threshold*abs(a)
(加上一个额外的abs())正是我想要的。一个相对阈值。 - Goswin Rothenthal