Sdílet prostřednictvím


/fp (zadání chování hodnot s plovoucí desetinnou čárkou)

Určuje chování plovoucí desetinné čárky v souboru zdrojového kódu.

/fp:[precise | except[-] | fast | strict ]

Příznaky

  • precise
    Výchozí nastavení

    Zlepšuje konzistenci testů čísel s plovoucí desetinnou čárkou na rovnost a nerovnost zakázáním optimalizací, které by mohly změnit přesnost výpočtů s plovoucí desetinnou čárkou. (Zachování určité přesnosti se vyžaduje pro striktní dodržování ANSI.) V kódu pro architekturu x86 kompilátor standardně používá 80bitové registry koprocesoru, v nichž uchovává průběžné výsledky výpočtů s plovoucí desetinnou čárkou.To zvyšuje rychlost programu a snižuje jeho velikost.Protože však výpočty zahrnují datové typy s plovoucí desetinnou čárkou reprezentované v paměti méně než 80 bity, může přenos dodatečných bitů přesnosti (80 bitů minus počet bitů v menším typu s plovoucí desetinnou čárkou) napříč delším výpočtem zapříčinit nekonzistentní výsledky.

    Je-li u procesorů x86 použit parametr /fp:precise, kompilátor při přiřazení, přetypování a předání parametrů funkci zaokrouhlí proměnné typu float na správnou přesnost.Toto zaokrouhlení zaručuje, že si data nezachovají větší platnost, než je kapacita jejich typu.Program zkompilovaný s parametrem /fp:precise může být pomalejší a větší než program zkompilovaný bez parametru /fp:precise.Parametr /fp:precise zakazuje vnitřní volání. Namísto nich jsou použity standardní rutiny knihoven runtime.Další informace naleznete v tématu /Oi (Generovat vnitřní funkce).

    Při použití parametru /fp:precise je povoleno následující chování čísel s plovoucí desetinnou čárkou:

    • Zkrácení – použití složené operace, která provede pouze jedno zaokrouhlení na konci a nahrazuje více operací.

    • Optimalizace výrazů, které jsou neplatné pro zvláštní hodnoty (NaN, +nekonečno, -nekonečno, +0, -0), nejsou povoleny.Optimalizace x-x => 0, x*0 => 0, x-0 => x, x+0 => x a 0-x => -x jsou z různých důvodů neplatné. (Viz IEEE 754 a standard C99.)

    • Kompilátor správně zpracovává porovnání, která zahrnují hodnotu NaN.Například výraz x != x je vyhodnocen na hodnotu true, má-li proměnná x hodnotu NaN a vyvolávají-li seřazená porovnání s hodnotou NaN výjimku.

    • Vyhodnocení výrazů dodržuje metodu FLT_EVAL_METHOD=2 standardu C99 s touto výjimkou: pokud je program určen pro procesory x86, považuje se to za přesnost long-double, protože jednotka FPU je nastavena na 53bitovou přesnost.

    • Násobení hodnotou přesně 1,0 se transformuje na použití druhého činitele.x*y*1.0 se transformuje na x*y.Obdobně x*1.0*y se transformuje na x*y.

    • Dělení hodnotou přesně 1,0 se transformuje na použití dělence.x*y/1.0 se transformuje na x*y.Obdobně x/1.0*y se transformuje na x*y.

    Při použití parametru /fp:precise v případech, kdy je zapnuto fenv_access, se zakážou optimalizace, například vyhodnocení výrazů s plovoucí desetinnou čárkou během kompilace.Pokud například použijete _control87, _controlfp, __control87_2 ke změně režimu zaokrouhlování a kompilátor provede výpočet s plovoucí desetinnou čárkou, nebude zadaný režim zaokrouhlování platit, pokud nebude fenv_access zapnuto.

    Parametr /fp:precise nahrazuje parametr kompilátoru /Op.

  • fast
    Vytvoří ve většině případů nejrychlejší kód zmírněním pravidel pro optimalizaci operací s plovoucí desetinnou čárkou.To umožňuje, aby kompilátor optimalizoval kód výpočtů s plovoucí desetinnou čárkou na rychlost na úkor přesnosti a správnosti.Při zadání parametru /fp:fast nemusí kompilátor správně zaokrouhlovat přiřazovací příkazy, přetypování nebo volání funkcí a nemusí provádět zaokrouhlování přechodných výrazů.Kompilátor může změnit pořadí operací nebo provádět algebraické transformace – například dodržováním asociativních a distributivních pravidel – bez ohledu na vliv na konečnou přesnost výsledků.Kompilátor může operace a operandy změnit na jednoduchou přesnost a nemusí dodržovat pravidla povyšování typů jazyka C++.Optimalizace zkrácení specifického pro plovoucí desetinnou čárku jsou vždy povoleny (fp_contract je zapnuto).Výjimky plovoucí desetinné čárky a přístup k prostředí jednotky FPU jsou zakázány (předpokládá se /fp:except- a fenv_access je vypnuto).

    Parametr /fp:fast nelze použít s parametrem /fp:strict ani /fp:precise.Použije se poslední parametr zadaný na příkazovém řádku.Při zadání parametru /fp:fast/fp:except se vygeneruje chyba kompilátoru.

    Zadání parametrů /Za, /Ze (Zakázat jazyková rozšíření) (kompatibilita s ANSI) a /fp:fast může způsobit neočekávané chování.Například operace s plovoucí desetinnou čárkou s jednoduchou přesností nemusejí být zaokrouhleny na jednoduchou přesnost.

  • except[-]
    Spolehlivý model výjimek s plovoucí desetinnou čárkouVýjimky jsou vyvolány okamžitě po aktivaci.Tento parametr je standardně vypnutý.Připojením znaménka minus k tomuto parametru ho explicitně zakážete.

  • strict
    Nejpřísnější model plovoucí desetinné čárkyParametr /fp:strict nastaví fp_contract na vypnuto a fenv_access na zapnuto.Předpokládá se parametr /fp:except, který lze zakázat explicitním zadáním parametru /fp:except-.Při použití s parametrem /fp:except- vynutí parametr /fp:strict striktní sémantiku plovoucí desetinné čárky, ale bez ohledu na výjimečné události.

Poznámky

Ve stejné kompilaci lze zadat více parametrů /fp.

Informace o řízení chování plovoucí desetinné čárky pomocí funkce naleznete v tématu o pragmatu float_control.Tím se přepíše nastavení /fp kompilátoru.Podle osvědčené technické praxe doporučujeme uložit a obnovit místní chování výpočtů s plovoucí desetinnou čárkou:

#pragma float_control(precise, on, push)
// Code that uses /fp:precise mode
#pragma float_control(pop)

Většina optimalizací plovoucí desetinné čárky souvisejících s parametry /fp:strict, /fp:except (a jejich odpovídajících pragmat) a pragmatem fp_contract je závislá na počítači.Parametry /fp:strict/fp:except nejsou kompatibilní s parametrem /clr.

Parametr /fp:precise by měl řešit většinu požadavků aplikace na plovoucí desetinnou čárku.Můžete použít parametry /fp:except/fp:strict, může ale dojít k určitému snížení výkonu.Je-li největší důraz kladen na výkon, zvažte použití parametru /fp:fast.

Parametry /fp:strict, /fp:fast/fp:precise jsou režimy přesnosti (správnosti).Současně může být aktivní pouze jeden.Při zadání obou parametrů /fp:strict/fp:precise použije kompilátoru ten, který je zpracován jako poslední.Nelze zadat jak parametr /fp:strict, tak /fp:fast.

Další informace naleznete v tématu Optimalizace plovoucí desetinné čárky v jazyce Microsoft Visual C++.

Nastavení tohoto parametru kompilátoru ve vývojovém prostředí Visual Studio

  1. Otevřete dialogové okno Stránky vlastností svého projektu.Podrobnosti naleznete v tématu Postupy: Otevření stránek vlastností projektu.

  2. Rozbalte uzel Vlastnosti konfigurace.

  3. Rozbalte uzel C/C++.

  4. Vyberte stránku vlastností Vytváření kódu.

  5. Upravte vlastnost Model plovoucí desetinné čárky.

Programové nastavení tohoto parametru kompilátoru

Viz také

Referenční dokumentace

Možnosti kompilátoru

Nastavení možností kompilátoru

Další zdroje

Optimalizace plovoucí desetinné čárky v jazyce Microsoft Visual C++