2014-05-11 3 views
0

J'ai actuellement la fonction:Définir un opérateur d'égalité pour les flotteurs avec la tolérance: (~ =)

let equal x1 x2 = abs(x1 - x2) < tolerance 

pour vérifier l'égalité avec une certaine tolérance puisque nous vérifions flotteurs de sorte qu'ils ne seront pas exactement égales.

Comment puis-je en faire un opérateur infixe binaire sur des flottants à la place, comme dans x ~ = y?

J'ai essayé:

type System.Double with 
static member (~-) (this, that: System.Double) = 
    equal this that 

, mais il dit que je les méthodes d'extension ne peuvent pas fournir la surcharge de l'opérateur

J'ai essayé alors d'hériter de System.Double et faire la même chose:

type double() = 
inherit System.Double() 
static member (==) (this, that: double) = 
    equal this that 

mais il se plaint que je ne peux pas hériter d'un type "scellé"

Comment serait d vous définissez alors un type double avec cette surcharge d'opérateur qui agit comme un System.Double normal ("float" dans F #) mais avec cette méthode de surcharge d'opérateur?

Répondre

1
let (=~) x1 x2 = abs(x1 - x2) < tolerance 
+0

merci! apparemment, je ne peux pas utiliser cet opérateur, cependant. Beaucoup d'autres opérateurs ne fonctionnent pas alors j'ai dû utiliser "==" à la place –

+0

Strange. Fonctionne bien pour moi. Assurez-vous que 'tolerance' est un' float'. Quelle version de F # utilisez-vous? Qu'est-ce que vous obtenez si vous envoyez la définition ci-dessus à FSI et l'utilisez? – Mau

+0

@Mau je peux vous montrer exactement ici http://chat.stackoverflow.com/rooms/52465/f-invalid-infix-operator –

Questions connexes