wifi: Remove lrint calls

Longs are 32-bit on Windows, differently from MacOS and Linux 64-bit, causing incorrect rounding of values when testing 320 MHz bands
This commit is contained in:
Gabriel Ferreira
2025-05-26 22:25:43 +02:00
parent 535bd900f1
commit 7ec3479022
3 changed files with 6 additions and 8 deletions

View File

@@ -319,8 +319,8 @@ HtPhy::GetPayloadDuration(uint32_t size,
case LAST_MPDU_IN_AGGREGATE: {
// last packet in an A-MPDU
uint32_t totalSize = totalAmpduSize + size;
numSymbols = lrint(
stbc * ceil((service + totalSize * 8.0 + 6 * nes) / (stbc * numDataBitsPerSymbol)));
numSymbols =
stbc * ceil((service + totalSize * 8.0 + 6 * nes) / (stbc * numDataBitsPerSymbol));
NS_ASSERT(totalAmpduNumSymbols <= numSymbols);
numSymbols -= totalAmpduNumSymbols;
if (incFlag)
@@ -336,7 +336,7 @@ HtPhy::GetPayloadDuration(uint32_t size,
// The number of OFDM symbols in the data field when BCC encoding
// is used is given in equation 19-32 of the IEEE 802.11-2016 standard.
numSymbols =
lrint(stbc * ceil((service + size * 8.0 + 6.0 * nes) / (stbc * numDataBitsPerSymbol)));
stbc * ceil((service + size * 8.0 + 6.0 * nes) / (stbc * numDataBitsPerSymbol));
break;
}
default:

View File

@@ -183,8 +183,7 @@ DsssPhy::GetPayloadDuration(uint32_t size,
double& /* totalAmpduNumSymbols */,
uint16_t /* staId */) const
{
return MicroSeconds(
lrint(ceil((size * 8.0) / (txVector.GetMode().GetDataRate(MHz_u{22}) / 1.0e6))));
return MicroSeconds(ceil((size * 8.0) / (txVector.GetMode().GetDataRate(MHz_u{22}) / 1.0e6)));
}
Ptr<WifiPpdu>

View File

@@ -260,8 +260,7 @@ OfdmPhy::GetPayloadDuration(uint32_t size,
// The number of OFDM symbols in the data field when BCC encoding
// is used is given in equation 19-32 of the IEEE 802.11-2016 standard.
double numSymbols =
lrint(ceil((GetNumberServiceBits() + size * 8.0 + 6.0) / (numDataBitsPerSymbol)));
double numSymbols = ceil((GetNumberServiceBits() + size * 8.0 + 6.0) / (numDataBitsPerSymbol));
Time payloadDuration =
FemtoSeconds(static_cast<uint64_t>(numSymbols * symbolDuration.GetFemtoSeconds()));
@@ -617,7 +616,7 @@ OfdmPhy::CalculateDataRate(Time symbolDuration,
double codingRate)
{
double symbolRate = (1e9 / static_cast<double>(symbolDuration.GetNanoSeconds()));
return lrint(ceil(symbolRate * usableSubCarriers * numberOfBitsPerSubcarrier * codingRate));
return ceil(symbolRate * usableSubCarriers * numberOfBitsPerSubcarrier * codingRate);
}
uint16_t