protocolbuffers / protocolbuffers/protobuf-javascript
JS: Handling Infinity values for Float fields
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 471
- Forks
- 91
- Avg merge
- 3h 57m
- Merged PRs (30d)
- 2
Description
Hello!
I noticed that in encoder.js, the method does not allow writeFloat does not accept Infinity as its value
/**
* Writes a single-precision floating point value to the buffer. Numbers
* requiring more than 32 bits of precision will be truncated.
* @param {number} value The value to write.
*/
jspb.BinaryEncoder.prototype.writeFloat = function(value) {
goog.asserts.assert((value >= -jspb.BinaryConstants.FLOAT32_MAX) &&
(value <= jspb.BinaryConstants.FLOAT32_MAX));
jspb.utils.splitFloat32(value);
this.writeUint32(jspb.utils.split64Low);
};
And its comment seems misleading because it says Numbers requiring more than 32 bits of precision will be truncated. but in reality, it throws an error.
Shouldn't writeFloat remove this restriction or at least this assert?
Thanks in advance,
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in encoder.js at BinaryEncoder.prototype.writeFloat and inspect the linked implementation, then trace how splitFloat32 and writeUint32 handle Infinity. Done means the accepted behavior for Infinity is implemented consistently with the method comment and clearly documented.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100