Assumere a
, b
, c
, e d
sono dichiarati double
(o float
). Le seguenti espressioni sono sempre vere?Sono disuguaglianze galleggiante garantiti per essere coerenti
! ((a >= b) && (c <= d)) || ((a-c) >= (b-d))
! ((a > b) && (c <= d)) || ((a-c) > (b-d))
! ((a >= b) && (c < d)) || ((a-c) > (b-d))
C'è alcuna garanzia dalla IEEE 754 o la corrente C o C++ standard? E qualsiasi compilatore lo ottimizzerà come semplicemente vero in fase di compilazione? Sono interessato principalmente ai valori normali, non tanto ai valori subnormali o speciali.
A me sembra che ciò dipenda dagli errori di arrotondamento durante la sottrazione.
"qualsiasi compilatore ottimizzerà questo come semplicemente vero in fase di compilazione" - perché non lo provi? –
@ 101010 "quando' a! = B' anche i loro bit di rappresentazione sono diversi "- errato. (+0 e -0, NaN, ecc.) –
Il compilatore può conoscere i valori di a, b, c e d in fase di compilazione? –