/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ #ifndef INCLUDED_SC_INC_MATH_HXX #define INCLUDED_SC_INC_MATH_HXX #include #include namespace sc { /** Return fNumerator/fDenominator if fDenominator!=0 else #DIV/0! error coded into double. */ inline double div( const double& fNumerator, const double& fDenominator ) { return (fDenominator != 0.0) ? (fNumerator / fDenominator) : CreateDoubleError( FormulaError::DivisionByZero); } /** Return fNumerator/fDenominator if fDenominator!=0 else +-Infinity if fNumerator!=0 or NaN if fNumerator==0. This allows to build/run with -fsanitize=float-divide-by-zero and have a defined behavior for the otherwise undefined division by zero case ("If the second operand of / or % is zero the behavior is undefined." ([expr.mul]/4)). The Calc interpreter gracefully handles Infinity or NaN double values encountered as interim or final results, using this function we can ensure defined behavior where desired. Use where the double coded error creating div() is not wanted. */ inline double divide( const double& fNumerator, const double& fDenominator ) { if (fDenominator == 0.0) { double fVal; if (std::isfinite( fNumerator) && fNumerator != 0.0) { rtl::math::setInf( &fVal, std::signbit( fNumerator)); } else { rtl::math::setNan( &fVal); } return fVal; } return fNumerator / fDenominator; } /** Return pow(fVal1,fVal2) with error handling. If an error was detected, a coded double error of FormulaError::IllegalFPOperation is returned. */ double power( const double& fVal1, const double& fVal2 ); } #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ ='distro/collabora/co-23.05'>distro/collabora/co-23.05 LibreOffice 核心代码仓库文档基金会
summaryrefslogtreecommitdiff
div class='content'>
AgeCommit message (Expand)Author
td>
AgeCommit message (Collapse)Author
Mert Tumer
2022-09-26jsdialog: send action not update for spin button valueSzymon Kłos
2022-08-22jsdialog: send MessageDialog on run not when builtSzymon Kłos
2022-07-28Enable Math sidebar panels for JSInstanceBuilderMike Kaganski
2022-07-26jsdialog: handle grab_focus actionSzymon Kłos
2022-07-26jsdialog: add open/close instead of toggle menu from dropdownSzymon Kłos
2022-07-21Removed duplicated includeAndrea Gelmini
2022-07-13clang-tidy modernize-pass-by-value in vclNoel Grandin
2022-07-04jsdialog: send grab_focus actionSzymon Kłos
2022-06-29jsdialog: toggle toolbox buttons correctlySzymon Kłos
2022-06-29jsdialog: formulabar: handle multiline selectionSzymon Kłos
2022-06-29jsdialog: be sure we send close popup message when destroyedSzymon Kłos
2022-06-29jsdialog: correctly parse click position for drawingareaSzymon Kłos
2022-06-10new loplugin:moveitNoel Grandin
2022-06-02cid#1504591 Uninitialized scalar fieldCaolán McNamara
2022-06-01Introduce weld::IconView::insert_separatorMike Kaganski
2022-05-31jsdialog: introduce popup managementSzymon Kłos
2022-05-04reduce string conversions in jsdialog::ExecuteActionNoel Grandin
2022-05-01jsdialog: handle formulabar as textinputSzymon Kłos
2022-05-01use more string_view in variousNoel Grandin
2022-04-30new loplugin:stringviewdangleNoel Grandin
2022-04-30jsdialog: used for formulabarSzymon Kłos
2022-04-15jsdialog: autofilter: unify with regular popupSzymon Kłos
2022-04-13jsdialog: reenable after welding, unify with dialogsSzymon Kłos
2022-03-17jsdialog: enable dialog on demand by env varSzymon Kłos
2022-03-06cid#1502882 silence Unchecked dynamic_castCaolán McNamara
2022-03-04jsdialog: enable Accessibility Check dialogSzymon Kłos
2022-02-21Use JSDialogBuilder for "Find and Replace" dialog.Gökay ŞATIR