Complex numbers for Solidity.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import "./Num_Complex.sol";
contract model {
Num_Complex num_complex;
Num_Complex.Complex a = Num_Complex.Complex({re:sd(1e18), im: sd(1e18)});
function test() public returns (Num_Complex.Complex memory) {
Num_Complex.Complex memory result = num_complex.ln(a);
return result;
}
}
Version 1.0
| Functions | Description | Gas Estimation |
|---|---|---|
| add | (a+bi) + (a+bi) | 698 |
| sub | (a+bi) - (a+bi) | 687 |
| mul | (a+bi) * (a+bi) | 2212 |
| div | (a+bi) / (a+bi) | 4099 |
| r2 | a^2 + b^2 = c^2 | 2188 |
| fromPolar | z=r(cosθ+isinθ) | 2518 |
| toPolar | z=r(cosθ+isinθ) | 5506 |
| atan2 | tan^-1 | 2632 |
| p_atan2 | precise tan^-1 | 3442 |
| atan1to1 | tan^-1 from -1 to 1 | 2496 |
| sqrt | (a+bi)^(1/2) | 8812 |
| pow | (a+bi)^n | 18182 |
| exp | e^(a+bi) | 4986 |
num_complex_solidity documentation
pnpm inpx hardhat test tests/math.test.tsBig thanks to the authors of the the - mds1/solidity-trigonometry and the prb-math repositories
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
npx prettier --write 'contracts/*.sol'
npx prettier --write '**/*.ts'