Skip to content
This repository has been archived by the owner on Jan 22, 2025. It is now read-only.

Update float docs (backport #16695) #16726

Merged
merged 1 commit into from
Apr 21, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 26 additions & 4 deletions docs/src/developing/on-chain-programs/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,10 +92,32 @@ specific needs.

## Float Support

Programs support a limited subset of Rust's float operations, though they are
highly discouraged due to the overhead involved. If a program attempts to use a
float operation that is not supported, the runtime will report an unresolved
symbol error.
Programs support a limited subset of Rust's float operations, if a program
attempts to use a float operation that is not supported, the runtime will report
an unresolved symbol error.

Float operations are performed via software libraries, specifically LLVM's float
builtins. Due to be software emulated they consume more compute units than
integer operations. In general, fixed point operations are recommended where
possible.

The Solana Program Library math tests will report the performance of some math
operations:
https://github.com/solana-labs/solana-program-library/tree/master/libraries/math

To run the test, sync the repo, and run:

`$ cargo test-bpf -- --nocapture --test-threads=1`

Recent results show the float operations take more instructions compared to
integers equivalents. Fixed point implementations may vary but will also be
less then the float equivalents:

```
u64 f32
Multipy 8 176
Divide 9 219
```

## Static Writable Data

Expand Down