亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言浮點函數中的modf和fmod詳解

 更新時間:2022年02月18日 15:25:42   作者:嵌入式@hxydj  
這篇文章主要為大家詳細介紹了C語言浮點函數中的modf和fmod,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

modf函數可以提取出浮點數的整數部分和小數部分。fmod函數可以返回兩個浮點數相除的余數。它們的函數原型如下:

  double __cdecl modf(double _X,double *_Y);
  double __cdecl fmod(double _X,double _Y);

這兩個函數的功能看起來都挺簡單的,但是為什么在C語言庫中還要專門搞一個函數來計算呢?在使用這兩個函數之前,首先看一個簡單的浮點數相關的例子。

int main ()
{
	int i;
	float j=1.0;

	for(i=0; i<100; i++)
	{
		j+=0.1;
		printf("%f \n",j);
	}
	return(0);
}

給一個浮點數1.0每次累加0.1,總共累加100,感覺就是一個簡單的加法運算,它的輸出結果肯定也知道是什么了,下面來運行一下這個代碼,輸出結果如下:

image.png

看到結果的第一眼,是不是感覺計算機算錯了?怎么算著算著結果還給跑偏了。其實計算機并沒有算錯,程序運行的結果也是正確的。這里使用一個在線浮點數轉換工具驗證一下。

首先看一下浮點數1.0在內存的存儲情況。

image.png

再看一下浮點數2.8在內存的存儲情況。

image.png

通過對比可以看出1.0的實際存儲值是1,和真實值是一樣的。2.8的實際存儲值是2.7999999523162841796875,和真實值已經產生了一點誤差。那么這個誤差是什么引起的呢?這里就要從浮點數的存儲原理說起了。

通在C語言中,一個浮點數占32位,其中第一位表示符號位,0表示正數,1表示負數。緊接著8位表示指數部分,也就是系統(tǒng)會將浮點數表示為指數計數法,這8位就是指數部分的值,但是這里的指數是以2為底的。剩下的23位表示的就是尾數,也就是有效數據。

由于小數部分都是通過 2^a+2^b+2^c.......2^n 這種指數的累加來實現的,而指數的累加不一定可以百分百的等于原值,它只可能無限的接近原值。所以對于浮點數的操作不是像整數那樣簡單,為了保證操作浮點數時的精度,所以C語言的庫函數才給我們提供了這兩種浮點數操作的函數,方便使用。

接下來看一下modf函數的用法。

#include <stdio.h>
#include <math.h>

int main ()
{
	double x, fractpart, intpart;

	x = 8.123456;
	fractpart = modf(x, &intpart);

	printf("整數部分= %lf\n", intpart);
	printf("小數部分 = %lf \n", fractpart);

	return(0);
}

modf函數有兩個參數,第一個參數時待操作的浮點數,第二個參數用來存儲浮點數的整數部分,它的返回值是浮點數的小數部分。

image.png

通過輸出結果可以看到,浮點數的整數部分和小數部分精度都沒有丟失。

再看一下fmod函數的用法。

#include <stdio.h>
#include <math.h>

int main ()
{
   float a, b;
   int c;
   a = 9.0;
   b = 3.7;
   c = 2;
      
   printf("%f / %f 的余數是 %lf\n", a, b, fmod(a,b));
   printf("%f / %d 的余數是 %lf\n", a, c, fmod(a,c));
   
	return(0);
}

fmod函數有兩個參數,第一個參數是分子,第二個參數是分母,它返回第一個參數除以第二個參數的余數。

image.png

通過輸出的結果可以看到,浮點數的精度沒有丟失。 

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

相關文章

  • C語言中聯合體與共用體和枚舉使用語法示例

    C語言中聯合體與共用體和枚舉使用語法示例

    這篇文章主要介紹了C語言中聯合體與共用體和枚舉使用語法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-12-12
  • C語言實現數學表達式運算

    C語言實現數學表達式運算

    這篇文章主要為大家詳細介紹了c語言實現數學表達式運算,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C語言實現簡單酒店管理系統(tǒng)

    C語言實現簡單酒店管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現簡單酒店管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言算法練習之數組元素排序

    C語言算法練習之數組元素排序

    這篇文章主要為大家介紹了C語言算法練習中數組元素排序的實現方法,文中的示例代碼講解詳細,對我們學習C語言有一定幫助,需要的可以參考一下
    2022-09-09
  • VC創(chuàng)建圓角dialog的實現方法

    VC創(chuàng)建圓角dialog的實現方法

    這篇文章主要介紹了VC創(chuàng)建圓角dialog的實現方法,結合實例形式分析了圓角dialog對話框的創(chuàng)建步驟與相關操作技巧,需要的朋友可以參考下
    2016-08-08
  • 詳談浮點精度(float、double)運算不精確的原因

    詳談浮點精度(float、double)運算不精確的原因

    這篇文章主要介紹了詳談浮點精度(float、double)運算不精確的原因,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • C++讀取NC數據的結果與真實數值不一致的解決方法

    C++讀取NC數據的結果與真實數值不一致的解決方法

    本文介紹基于C++ 語言的netCDF庫讀取.nc格式的柵格文件時,代碼讀取到的數據與柵格文件的實際數據不一致的解決方法,文中通過代碼示例和圖文講解的非常詳細,需要的朋友可以參考下
    2024-03-03
  • 淺談C++中的mutable和volatile關鍵字

    淺談C++中的mutable和volatile關鍵字

    下面小編就為大家?guī)硪黄獪\談C++中的mutable和volatile關鍵字。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • 使用C++11實現Android系統(tǒng)的Handler機制

    使用C++11實現Android系統(tǒng)的Handler機制

    這篇文章主要介紹了使用C++11實現Android系統(tǒng)的Handler機制,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • linux根據pid獲取進程名和獲取進程pid(c語言獲取pid)

    linux根據pid獲取進程名和獲取進程pid(c語言獲取pid)

    status文件,第一行的Name即為進程名,C程序實現根據PID獲取進程名和根據進程名獲取PID,大家參考使用吧
    2013-12-12

最新評論