Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Shared / MS / Internal / FloatUtil.cs / 1 / FloatUtil.cs
//---------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation. All rights reserved. // // File: FloatUtil.cs // // Description: This file contains the implementation of FloatUtil, which // provides "fuzzy" comparison functionality for floats and // float-based classes and structs in our code. // // History: // 04/28/2003 : adsmith - Created this header // 05/20/2003 : adsmith - Move to Shared. // //--------------------------------------------------------------------------- using System; namespace MS.Internal { internal static class FloatUtil { internal static float FLT_EPSILON = 1.192092896e-07F; internal static float FLT_MAX_PRECISION = 0xffffff; internal static float INVERSE_FLT_MAX_PRECISION = 1.0F / FLT_MAX_PRECISION; ////// AreClose /// public static bool AreClose(float a, float b) { if(a == b) return true; // This computes (|a-b| / (|a| + |b| + 10.0f)) < FLT_EPSILON float eps = ((float)Math.Abs(a) + (float)Math.Abs(b) + 10.0f) * FLT_EPSILON; float delta = a - b; return(-eps < delta) && (eps > delta); } ////// IsOne /// public static bool IsOne(float a) { return (float)Math.Abs(a-1.0f) < 10.0f * FLT_EPSILON; } ////// IsZero /// public static bool IsZero(float a) { return (float)Math.Abs(a) < 10.0f * FLT_EPSILON; } ////// IsCloseToDivideByZero /// public static bool IsCloseToDivideByZero(float numerator, float denominator) { // When updating this, please also update code in Arithmetic.h return Math.Abs(denominator) <= Math.Abs(numerator) * INVERSE_FLT_MAX_PRECISION; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation. All rights reserved. // // File: FloatUtil.cs // // Description: This file contains the implementation of FloatUtil, which // provides "fuzzy" comparison functionality for floats and // float-based classes and structs in our code. // // History: // 04/28/2003 : adsmith - Created this header // 05/20/2003 : adsmith - Move to Shared. // //--------------------------------------------------------------------------- using System; namespace MS.Internal { internal static class FloatUtil { internal static float FLT_EPSILON = 1.192092896e-07F; internal static float FLT_MAX_PRECISION = 0xffffff; internal static float INVERSE_FLT_MAX_PRECISION = 1.0F / FLT_MAX_PRECISION; ////// AreClose /// public static bool AreClose(float a, float b) { if(a == b) return true; // This computes (|a-b| / (|a| + |b| + 10.0f)) < FLT_EPSILON float eps = ((float)Math.Abs(a) + (float)Math.Abs(b) + 10.0f) * FLT_EPSILON; float delta = a - b; return(-eps < delta) && (eps > delta); } ////// IsOne /// public static bool IsOne(float a) { return (float)Math.Abs(a-1.0f) < 10.0f * FLT_EPSILON; } ////// IsZero /// public static bool IsZero(float a) { return (float)Math.Abs(a) < 10.0f * FLT_EPSILON; } ////// IsCloseToDivideByZero /// public static bool IsCloseToDivideByZero(float numerator, float denominator) { // When updating this, please also update code in Arithmetic.h return Math.Abs(denominator) <= Math.Abs(numerator) * INVERSE_FLT_MAX_PRECISION; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- COM2TypeInfoProcessor.cs
- SafeCancelMibChangeNotify.cs
- MethodAccessException.cs
- TransactionBehavior.cs
- MemoryFailPoint.cs
- EntityConnection.cs
- ResolveInfo.cs
- PhysicalFontFamily.cs
- CanonicalFormWriter.cs
- SizeConverter.cs
- PropertyDescriptorCollection.cs
- MediaElement.cs
- CleanUpVirtualizedItemEventArgs.cs
- DateTimeUtil.cs
- ReadOnlyNameValueCollection.cs
- PrincipalPermission.cs
- SHA256CryptoServiceProvider.cs
- FeedUtils.cs
- WebServiceData.cs
- AssemblyCache.cs
- base64Transforms.cs
- SoapExtensionTypeElement.cs
- DoubleConverter.cs
- AdvancedBindingPropertyDescriptor.cs
- EarlyBoundInfo.cs
- NameScopePropertyAttribute.cs
- OdbcException.cs
- ActionFrame.cs
- WindowsPrincipal.cs
- UnsafeNativeMethods.cs
- CompoundFileStreamReference.cs
- InkCanvasAutomationPeer.cs
- PolicyChain.cs
- filewebresponse.cs
- DependencyObject.cs
- CodeObjectCreateExpression.cs
- CornerRadiusConverter.cs
- StrokeCollectionDefaultValueFactory.cs
- Int16.cs
- SoapReflector.cs
- FixedSOMTableRow.cs
- PropertyMetadata.cs
- Authorization.cs
- IndexedGlyphRun.cs
- HashRepartitionStream.cs
- AccessDataSourceView.cs
- securitymgrsite.cs
- Parameter.cs
- ProfessionalColorTable.cs
- ZipIOBlockManager.cs
- InvalidWMPVersionException.cs
- AutomationAttributeInfo.cs
- SignatureHelper.cs
- SqlVersion.cs
- NegotiationTokenAuthenticatorState.cs
- UnsafeNativeMethodsMilCoreApi.cs
- CacheAxisQuery.cs
- DataGridPagerStyle.cs
- SqlFactory.cs
- Timer.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- SqlRecordBuffer.cs
- GridProviderWrapper.cs
- X509SecurityTokenProvider.cs
- HtmlInputButton.cs
- SectionInput.cs
- ClipboardProcessor.cs
- ApplyHostConfigurationBehavior.cs
- PerformanceCountersElement.cs
- AggregateNode.cs
- HtmlFormWrapper.cs
- BasicDesignerLoader.cs
- HandlerBase.cs
- QuadTree.cs
- NamespaceTable.cs
- XmlDictionary.cs
- LoginName.cs
- CompiledRegexRunnerFactory.cs
- ProfileParameter.cs
- TdsParserHelperClasses.cs
- ControlDesignerState.cs
- SmiEventStream.cs
- Utils.cs
- FrameworkRichTextComposition.cs
- DataServices.cs
- _SslStream.cs
- XmlNode.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- TextElementEnumerator.cs
- PkcsMisc.cs
- KeyValuePairs.cs
- StringUtil.cs
- DataGridViewColumnConverter.cs
- ConfigXmlCDataSection.cs
- XmlUtil.cs
- SequenceDesigner.xaml.cs
- ArglessEventHandlerProxy.cs
- RelationshipConverter.cs
- NotFiniteNumberException.cs
- TextDecorationUnitValidation.cs