x11start
Guest
volendo arrotondare un numero all'intero non è un problema: basta sommarci il valore 0.5 e poi con fix scartare la parte dopo la virgola. in questo modo i valori che superano 0.5 passano al valore superiore (es. 6.6 + 0.5 = 7.1 -> 7) mentre i valori inferiori ... (es. 6.1 + 0.5 = 6.6 -> 6).
il problema sorge quando si vuole arrotondare .... allo 0.5.
io ho trovato questo algoritmo:
(/ (* (fix (/ (* (atof (rtos numero 2 1)) 10) (float passo))) (float passo)) 10)
questo consente di trasformare i numeri con la virgola fino a 0.49999 a 0.0; mentre quelli da 0.5 in poi diventano 1.0
questa è la sub completa:
;
;----------------------
; arrotondamento
;----------------------
;
; numero numero da arrotondare (es. 4.3546)
; passo valore di arrotondamento (es. 5 -> 0.5) (reale o intero: float trasf. sempre in reale)
;
; output:
;
; narro numero arrotondato (es da 4.0 a 4.4 -> 4.0 - da 4.5 a 5.0 -> 5.0 con passo=5)
;
(defun arrotonda (numero passo)
(setq narro (/ (* (fix (/ (* (atof (rtos numero 2 1)) 10) (float passo))) (float passo)) 10))
)
mi piacerebbe trovare un algoritmo in grado di "spaccare in 2 il capello" cioè
fare:
da 0.0 a 0.24 -> 0.0
da 0.25 a 0.74 -> 0.5
da 0.75 in su -> 1.0
c'è qualcuno in grado di aiutarmi?
il problema sorge quando si vuole arrotondare .... allo 0.5.
io ho trovato questo algoritmo:
(/ (* (fix (/ (* (atof (rtos numero 2 1)) 10) (float passo))) (float passo)) 10)
questo consente di trasformare i numeri con la virgola fino a 0.49999 a 0.0; mentre quelli da 0.5 in poi diventano 1.0
questa è la sub completa:
;
;----------------------
; arrotondamento
;----------------------
;
; numero numero da arrotondare (es. 4.3546)
; passo valore di arrotondamento (es. 5 -> 0.5) (reale o intero: float trasf. sempre in reale)
;
; output:
;
; narro numero arrotondato (es da 4.0 a 4.4 -> 4.0 - da 4.5 a 5.0 -> 5.0 con passo=5)
;
(defun arrotonda (numero passo)
(setq narro (/ (* (fix (/ (* (atof (rtos numero 2 1)) 10) (float passo))) (float passo)) 10))
)
mi piacerebbe trovare un algoritmo in grado di "spaccare in 2 il capello" cioè
fare:
da 0.0 a 0.24 -> 0.0
da 0.25 a 0.74 -> 0.5
da 0.75 in su -> 1.0
c'è qualcuno in grado di aiutarmi?