stuff around publishing crate successfuly done
This commit is contained in:
91
steel_decimal/README.md
Normal file
91
steel_decimal/README.md
Normal file
@@ -0,0 +1,91 @@
|
||||
# Steel Decimal
|
||||
|
||||
A Rust library that provides high-precision decimal arithmetic support for the [Steel programming language](https://github.com/mattwparas/steel). This crate transforms Steel scripts to use decimal operations and provides function registration utilities for Steel VMs.
|
||||
|
||||
## Features
|
||||
|
||||
- **High-precision decimal arithmetic** using `rust_decimal` crate
|
||||
- **Automatic script transformation** from standard math to decimal operations
|
||||
- **Comprehensive mathematical functions** (basic arithmetic, trigonometry, logarithms)
|
||||
- **Financial calculations** with proper decimal precision
|
||||
- **Configurable precision control**
|
||||
- **Selective function registration** via builder pattern
|
||||
- **Variable support** with validation
|
||||
- **Thread-safe** precision contexts
|
||||
|
||||
## Quick Start
|
||||
|
||||
Add this to your `Cargo.toml`:
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
steel_decimal = "1.0.0"
|
||||
```
|
||||
|
||||
## Supported Operations
|
||||
|
||||
### Basic Arithmetic
|
||||
- Addition: `(+ a b)` → `(decimal-add "a" "b")`
|
||||
- Subtraction: `(- a b)` → `(decimal-sub "a" "b")`
|
||||
- Multiplication: `(* a b)` → `(decimal-mul "a" "b")`
|
||||
- Division: `(/ a b)` → `(decimal-div "a" "b")`
|
||||
|
||||
### Advanced Mathematics
|
||||
- Power: `(^ base exp)` → `(decimal-pow "base" "exp")`
|
||||
- Square root: `(sqrt x)` → `(decimal-sqrt "x")`
|
||||
- Natural log: `(ln x)` → `(decimal-ln "x")`
|
||||
- Base 10 log: `(log10 x)` → `(decimal-log10 "x")`
|
||||
- Exponential: `(exp x)` → `(decimal-exp "x")`
|
||||
|
||||
### Trigonometric Functions
|
||||
- `(sin x)`, `(cos x)`, `(tan x)`
|
||||
|
||||
### Comparison Operations
|
||||
- `(> a b)`, `(< a b)`, `(= a b)`, `(>= a b)`, `(<= a b)`
|
||||
|
||||
### Financial Functions
|
||||
- Percentage: `(decimal-percentage amount rate)`
|
||||
- Compound interest: `(decimal-compound principal rate time)`
|
||||
|
||||
### Precision Control
|
||||
- Set precision: `(set-precision 4)`
|
||||
- Get current precision: `(get-precision)`
|
||||
- Clear precision: `(clear-precision)`
|
||||
|
||||
## Examples
|
||||
|
||||
The crate includes several examples:
|
||||
|
||||
```bash
|
||||
# Basic usage
|
||||
cargo run --example basic_usage
|
||||
|
||||
# Selective function registration
|
||||
cargo run --example selective_registration
|
||||
|
||||
# Working with variables
|
||||
cargo run --example with_variables
|
||||
```
|
||||
|
||||
## Scientific Notation Support
|
||||
|
||||
Steel Decimal supports scientific notation in decimal parsing:
|
||||
|
||||
```rust
|
||||
let script = "(+ 1.5e2 2.3e-1)"; // 150 + 0.23 = 150.23
|
||||
let transformed = steel_decimal.transform(script);
|
||||
```
|
||||
|
||||
## Thread Safety
|
||||
|
||||
Precision settings are thread-local, allowing different threads to use different precision contexts safely.
|
||||
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under either of
|
||||
|
||||
- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
- MIT License ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
|
||||
|
||||
at your option.
|
||||
Reference in New Issue
Block a user