2010-03-10 2 views
4

J'ai un logiciel écrit en VB.NET qui effectue beaucoup de calculs, en extrayant principalement des jpegs vers des bitmaps et en calculant des calculs sur les pixels comme les convolutions et la multiplication matricielle. Différents ordinateurs me donnent des résultats différents malgré des entrées identiques. Quelle pourrait être la raison?Pourquoi différents ordinateurs peuvent-ils calculer différents résultats arithmétiques dans VB.NET?

Modifier: Je ne peux pas fournir l'algorithme car il est propriétaire, mais je peux fournir toutes les opérations concernées:

  • ULONG \ ULONG (division Turuncating)
  • Bitmap.Load ("nom de fichier. BMP ») (Charger une image dans la mémoire)
  • Bitmap.GetPixel (Integer, Integer) (Obtenir la luminosité d'un pixel)
  • Double + Double
  • Double * Double
  • Math.sqrt (Double)
  • Math.PI.
  • Math.cos (Double)
  • ULONG - ULONG
  • ULONG * ULONG
  • ULONG < < ULONG
  • List.OrderBy (Of Double) (Func)

Hmm ... Est-il possible que OrderBy utilise un QuickSort non stable et à QuickSort utilise un pivot aléatoire? Modifier: Juste testé, non. Le tri est stable.

+2

Est-il possible de donner quelques exemples simples? Il y a peut-être chez eux un motif que quelqu'un peut reconnaître, mais sans échantillon, c'est beaucoup plus de spéculation. – FrustratedWithFormsDesigner

+0

Je suggérerais d'essayer de trouver le premier point auquel les calculs commencent à différer. Cela pourrait vous permettre de réduire le problème à une seule opération primitive qui produit des résultats différents avec les mêmes entrées. Y a-t-il des différences notables entre les différentes machines? Est-ce qu'ils utilisent tous les deux le même système d'exploitation? Sont-ils tous les deux 32 bits (ou les deux 64 bits)? À quel point les résultats que vous obtenez sont-ils différents?De minuscules différences dans les valeurs à virgule flottante, ou quelque chose de plus significatif que cela? Avez-vous des résultats différents sur une seule machine? –

+0

Je ne suis pas en contrôle des ordinateurs fournissant des résultats différents. Je ne sais même pas quels ordinateurs ils sont. Juste les utilisateurs se connectant à mon serveur et fournissant et résultat incohérent d'une équation compliquée. – Eyal

Répondre

2

avère que Bitmap.Load ("filename.jpeg") ne produit pas toujours le même bitmap sur chaque ordinateur. Je ne sais toujours pas pourquoi, cependant.

+0

Je suis un peu confus. Que voulez-vous dire dosnt produire le même bitmap (désolé, je suis un noob et je crée ma propre bibliothèque de manipulation d'image). – masfenix

+0

La sortie de (new Bitmap ("foo.jpg")). GetPixel (10,10) peut être différente sur chaque ordinateur. – Eyal

1
  • un ou plusieurs bogues dans le logiciel (par exemple, des variables non initialisées)?

  • Ancien bogue de division à virgule flottante du processeur Intel?

  • algorithme numériquement instable?

+1

+1 pour le bug old intel, je me souviens de celui-là. – rook

+0

VB.Net ne devrait pas avoir de variables non initialisées mais j'ai tous les avertissements activés pour ces cas et il n'y en a pas. Peut-être que List.OrderBy() utilise un QuickSort non stable avec un pivot aléatoire? – Eyal

1

Pilotes d'écran - Chaque pilote va GUI les valeurs différemment. Bien que le nombre de pixels soit identique, la profondeur de couleur peut différer via les pilotes d'écran. Maintenant, installez dans un tableau et comparez ce tableau sur ces machines, vous pouvez voir une différence de plusieurs octets.

Je voudrais imprimer les totaux et voir ce qu'ils ajoutent à

Questions connexes