Jestem w trakcie tworzenia programu, który generuje wektory testowe do użycia w testerze VHDL. Testbench w zasadzie testuje kawałek sprzętu, który działa jako sumator zmiennoprzecinkowy o pojedynczej dokładności, więc wektory będą zgodne ze standardem IEEE 754.Czy jest niebezpieczna konwersja z formatu float na BigDecimal, a następnie z powrotem?
W każdym razie, moim obecnym planem generowania jest konwersja wartości zmiennoprzecinkowych na BigDecimal
, wykonaj niezbędne operacje arytmetyczne, a następnie przekonwertuj z powrotem na zmienną. Czy to jest niebezpieczne? Czy precyzja zostanie utracona, powodując potencjalnie niedokładny wynik w wektorze testowym? Chcę przekonwertować na BigDecimal
, aby uniknąć problemów z zaokrąglaniem.
Czy to spowoduje obcięcie wyniku?
BigDecimal repA = new BigDecimal(Float.toString(A));
BigDecimal repB = new BigDecimal(Float.toString(B));
BigDecimal repResult = repA.add(repB);
float result = repResult.floatValue();
Gdzie A i B są trochę zmiennoprzecinkowe.
Na pewno stracisz precyzję, ponieważ zmienna nie może reprezentować wszystkich możliwych liczb ułamkowych. – anubhava
Czy istnieje sposób, w jaki mogę to osiągnąć, nie tracąc precyzji? – Franklin
Jaka jest dokładność, według Ciebie, jakiej potrzebujesz? –