Non esiste questa opzione.
La parola di controllo FPU in un'app C# viene inizializzata dal CLR all'avvio. La modifica non è un'opzione fornita dal framework. Anche se provi a cambiarlo con il pinzettante _control87_2(), non durerà a lungo; qualsiasi eccezione causerà il reset della parola di controllo dall'implementazione della gestione delle eccezioni all'interno del CLR. Che è stato scritto per trattare un altro aspetto della parola di controllo della FPU, consente di smascherare le eccezioni a virgola mobile. Sarà inoltre dannoso per qualsiasi altro codice gestito che non si aspetti che lo stato globale venga modificato in questo modo.
Non avere un controllo diretto sull'hardware è una restrizione implicita quando si esegue il codice in una macchina virtuale. Non è affatto facile farlo anche nel codice nativo, le librerie tendono a comportarsi male quando anche loro si aspettano che l'FPU abbia l'inizializzazione predefinita. In particolare un problema con i flag di mascheramento delle eccezioni, le DLL create con gli strumenti Borland hanno un'abilità per attivare le eccezioni, facendo fallire altro codice che non è stato scritto per gestire un'eccezione del genere. Un problema estremamente brutto da risolvere, la parola di controllo FPU è la peggiore variabile globale che si possa immaginare.
Questo ti porta il peso di non lasciare che i tuoi calcoli in virgola mobile vadano in tilt in questo modo. Il calcolo con i denormali produce quasi sempre risultati senza senso, se non da valori radicalmente piccoli, quindi almeno dalla rapida perdita di cifre significative. Troncare valori inferiori a 2.2E-308 a 0 dipende da te. Sì, non molto pratico. Forse va bene che un programma fornisca risultati senza senso un po 'più lenti del normale :)
fonte
2014-04-07 14:56:56
Non penso che sia una domanda tecnica sciocca. – user1717828