Solidity serves as a specialized programming language tailor-made for crafting smart contracts within blockchain ecosystems like Ethereum. These smart contracts underpin decentralized applications (DApps) and other blockchain-based solutions, fundamentally reshaping trust and agreements in the digital realm. Solidity’s user-friendly syntax empowers developers to define rules and behaviours for self-executing contracts that automatically trigger actions based on specific conditions. Emphasizing security and transparency, Solidity facilitates the utilization of blockchain technology’s potential, playing a pivotal role in the ongoing decentralization movement.

When working with floating-point numbers in the Solidity programming language, developers encounter certain limitations due to its design. Solidity primarily deals with fixed-point and integer arithmetic, lacking native support for traditional floating-point operations. This can lead to challenges when precision and accuracy are crucial, as floating-point arithmetic can result in rounding errors and inaccuracies. While workarounds using fixed-point arithmetic and scaling techniques are possible, it’s important to acknowledge that handling floating-point numbers in Solidity requires careful consideration to ensure precise calculations, especially in scenarios like financial applications or complex scientific simulations. By being aware of these constraints and exploring alternative strategies, developers can navigate the intricacies of floating-point operations in Solidity effectively.

When integrating floating-point numbers into Solidity, it’s vital to recognize their potential imprecision, especially within Solidity’s framework focused on secure smart contract development. Inaccuracies associated with floating-point numbers can introduce vulnerabilities, leading to unexpected outcomes like rounding errors in smart contracts. To address this, Solidity circumvents floating-point usage by employing integers for decimal number representation. This involves utilizing the uint256 data type capable of handling numbers up to 2^256 – 1. To express decimals with fractional parts, integers are scaled by powers of 10. For instance, 0.1 can be represented as 10**-1. Although this strategy sacrifices some precision compared to floating-point numbers, it aligns with Solidity’s commitment to robust and secure contract execution.

Introducing a new approach that addresses these challenges with enhanced resilience, our solution offers a more advanced treatment of floating values within Solidity. By strategically mitigating the rounding issue, our approach provides heightened accuracy and robustness, paving the way for precise calculations in smart contracts. This innovative methodology not only aligns with Solidity’s overarching security principles but also empowers developers to navigate the complexities of floating-point operations with confidence.

 

Novel Calculation Smart Contract

This approach, executed through the Calculations contract, introduces a novel methodology centered around the concept of values and exponents. By harnessing these two core components, developers gain a formidable toolkit that circumvents the conventional limitations of floating-point arithmetic. The contract seamlessly integrates this approach into essential arithmetic operations, including multiplication, division, addition, and subtraction.

1. Multiplication : 

The Multiply function brings a smart and accurate approach to multiplying values in Solidity, even when handling floating-point numbers. This function takes two sets of values: the first pair represents the values to be multiplied, while the second pair represents their respective exponents. The magic unfolds as the function first multiplies the values together, ensuring precision and avoiding common errors associated with traditional floating-point calculations. Then, it combines the exponents, creating a new exponent that captures the cumulative effect of the operation. This innovative process safeguards against rounding issues and delivers reliable outcomes.

Example :

26.5 * 32.43 -> (265 * 10^-1) * (3243*10^-2)

Inputs: 
Values:  265, 3243
Exponents: -1, -2


Outcomes: 
Value: 859395
Exponent: -3
Actual value: 859.395 (859395*10^-3)

2. Division : 

This function operates by intelligently handling division operations within the context of Solidity. It begins by transforming the numerator’s value through a multiplication process that involves raising it to a power of 10^6. This step ensures that the division operation maintains precision, effectively sidestepping potential inaccuracies. Subsequently, the transformed value is divided by the denominator’s value, yielding an accurate result. To manage the associated exponents, the function calculates an exponent result by subtracting the denominator’s exponent from the numerator’s exponent, and then further reducing it by 6. This final step adjusts for the 10^6 multiplication carried out earlier. It’s essential to note that this exponent manipulation should be addressed in the calling contract.

Example :

325.6 / 26.5 -> (3256 * 10^-1) / (265*10^-1)

Inputs: 
Values:  3256, 265
Exponents: -1, -1

Outcomes: 
Value: 12286792
Exponent: -6
Actual value: 12.286792 (12286792*10^-6)

3. Addition : 

The Add function, a pivotal component of this innovative approach, orchestrates precision-driven addition operations within the Solidity environment. The function seamlessly harmonizes two critical elements: values and exponents. When invoked, it expertly navigates the complexities of varying exponents associated with input values. Through a decision-making process, the function discerns the optimal course of action: adjusting values to maintain accuracy and circumvent potential rounding errors. Whether the exponents are equal or differ, the Addition function masterfully calculates and returns an outcome that is both reliable and trustworthy.

Example :

26.5 + 32.43 -> (265 * 10^-1) + (3243*10^-2)

Inputs: 
Values:  265, 3243
Exponents: -1, -2

Outcomes: 
Value: 5893
Exponent: -2
Actual value: 58.93 (5893*10^-2)

4. Subtraction : 

The Subtract function involves value and exponent manipulation to ensure accurate outcomes, even when working with decimal values. By comparing the exponents of two operands, the function determines the appropriate course of action. If one operand has a greater exponent, the function adjusts its value by scaling it down, ensuring compatibility with the other operand. This prevents rounding issues and facilitates precise subtraction. Conversely, if the exponents are equal, the function performs straightforward subtraction. In both cases, the adjusted value and exponent are calculated to yield a result that maintains accuracy. 

Example :

32.43 - 26.5  -> (3243 * 10^-2) - (265*10^-1)

Inputs: 
Values:  3243, 265
Exponents: -2, -1

Outcomes: 
Value: 593
Exponent: -2
Actual value: 5.93 (593*10^-2)

The verified contracts can be found on :

Polygon Mumbai: https://mumbai.polygonscan.com/address/0x9cd071c1d7374b9d80a53e4334f4adb5f2fce277#code

Sepolia: https://sepolia.etherscan.io/address/0xa17511597d7728fb4ea77fff1ecb6e628f544107

In conclusion, our groundbreaking Precision-Perfect Floating-Point Solution promises to revolutionize Ethereum smart contracts by offering enhanced accuracy and resilience in handling floating-point operations. With its novel methodology centred around values and exponents, this innovative approach ensures precision in essential arithmetic operations like multiplication, division, addition, and subtraction. Our commitment to secure smart contract development aligns seamlessly with Solidity’s principles, empowering developers to navigate the complexities of floating-point operations with confidence. Excitingly, we are on the verge of releasing these verified contracts on the Polygon and Ethereum mainnets, ushering in a new era of precise and reliable blockchain-based solutions. Stay tuned for more updates as we bring this transformative technology to the broader blockchain community, unlocking new possibilities for decentralized applications and beyond.