From: Matteo Mancini Date: 2007-10-09T06:06:53+09:00 Subject: Piccolo con problema con il tipo float Ho iniziato da poco a programmare in ruby, e stavo facendo un piccolo programma che, dato un sistema di disequazioni, trova i punti comuni a queste, impostando un problema di programmazione lineare. Viene chiesto in input prima il numero di disequazioni (vincoli) e quindi i parametri in questo modo: ax+by+c>=0 prima il coefficiente di x, quindi quello di y, il termine noto, e infine un quarto parametro da impostare ad 1 o a -1 per il segno della disequazione. Ho provato il seguente sistema: 0.9x+1.5y<=45 x+y<=36 x>=10 y>=0 Quindi inserisco da input: 4 | 0.9 | 1.5 | 45 | -1 | 1 | 1 | 36 | -1 | 1 | 0 | 10 | 1 | 0 | 1 | 0 | 1 I punti in comune calcolati a mano sono: (10,0) (36,0) (15,21) (10,24) E qui sorge il problema: il programma mi scarta il punto (15,21) alla prima disequazione (provate a mano, la verifica!) e la fatidica somma 0.9*0.15+1.5*21-45 ridà nientepocodimenoche 7.105427357601e-015!!! Fatta numericamente dà 0, eppure il programma sputa fuori questo risultato! Sono ore che ci combatto, datemi una mano vi prego! Grazie in anticipo! Il file principale è allegato, seguono le due piccole classi che ho implementato: point.rb class Point attr_reader :x, :y def initialize (x,y) @x=x @y=y end end diseq.rb require 'myrbs\point' class Diseq < Point attr_reader :t,:s def initialize (x,y,t,s) super(x,y) @t=t @s=s end def solve(a,b) c=x*a+y*b-t puts c if(c*s>=0) o=1 else o=0 end o end end Attachments: http://www.ruby-forum.com/attachment/603/area.rb -- Posted via http://www.ruby-forum.com/.